Sei sulla pagina 1di 34

Wordpress 3.

2
Piccolo manuale (in)completo

Igor Nardo

Wordpress 3.2 - indice:


1) Il CMS Wordpress ed i requisiti di base .........................................................
1.1 Cos Wordpress
1.2 Hosting
1.3 Database
1.4 PHP
1.5 Moduli php
1.6 Permessi
2) Installazione
2.1 Installazione (i due metodi) ................................................................
2.2 Linterfaccia di backend
2.3 Utenti e permessi, i vari privilegi di accesso
2.4 Setup di base
2.5 Rendere il sito privato (maintenance / chiusura agli spider)
2.6 WP-config

P.4

P.5

3) Il funzionamento di base ................................................................................


3.1 Articoli
3.2 Pagine
3.3 Autori
3.4 Multimedia (foto e video)
3.5 Versioni e revisioni
3.6 Autosave
3.7 I post meta
3.8 Tag e categorie

P.8

4) Ottimizzazione di base ....................................................................................


4.1 Plugin SEO fondamentali
4.2 Plugin per backup sito e database
4.3 Migliorare la sicurezza

P.11

5) I temi (themes) ................................................................................................


5.1 Struttura di base di un tema
5.2 Le componenti del tema
5.3 Le sidebar: creazione e modifica
5.4 I menu: creazione e modifica
5.5 Come trovare un tema (o acquistare)
5.6 Diversi modi per installare un tema

P.14

6) Ricerca e installazione di plugins ...................................................................


6.1 Come trovarli, come sceglierli, versioni e compatibilit
6.2 Verificare le fonti
6.4 Installazione e Testing
6.5 Conflitti fra plugins e troubleshooting
6.6 Plugins minimi consigliati

P.21

7) Functions.php ..................................................................................................
7.1 Come estendere i campi custom
7.2 Creare nuovi tipi di pagine (diversi da post e page)
7.3 Il core di wordpress: le classi e lestensibilit
7.4 pluggare functions.php
7.5 Hooks: come estendere facilmente le funcioni (e classi) native
7.6 Shortcodes

P.23

8) Plugins ..............................................................................................................
8.1 Cos un plugin
8.2 Scrivere un plugin
8.3 Aggiungere un pannllo amministrativo
8.4 Salvare opzioni del plugin in database

P.28

9) Autenticazione mediante protocollo SOAP ....................................................


9.1 Cos il protocollo SOAP
9.2 Utilizzo con wordpress, plugin necessari e adattamento

P.33

1) Il CMS Wordpress ed i requisiti di base


1.1 Cos Wordpress
Wordpress un potente CMS (Content Management System) basato su PHP e MySQL gratuito, con licenza GNU GPL.
Originariamente nato per la gestione di blog nel loro periodo doro, le sue funzionalit sono
state estese fino a renderlo un CMS perfetto per gestire anche siti aziendali, archivi fotografici, video log, e-commerce, gestionali interni e molto altro.
Si compone di un lato front-end e di un gestionale (wp-admin).

La chiave del successo di questo CMS data da 3 fattori fonamentali:


Linfinita scalabilit, che grazie alle migliaia di plugins disponibili consente di adattare la struttura a qualunque uso.
Semplicit di utilizzo: linterfaccia pu facilmente essere adattata per ciascun utente al fine di semplificarne lutilizzo restringendo laccesso alle sole aree di pertinenza legate ad un account
Uninfinita comunit di sviluppatori ed utenti sempre disponibili a risolvere i problemi degli altri su forum, blog ed altro. Questo rende quasi impossibile non reperire le informazioni necessarie a raggiungere un particolare scopo, e costituisce
una grande sicurezza nelladozione di questa piattaforma.

1.2 Hosting

Lhosting per wordpress ha caratteristiche ben precise e poco costose, bench con le ultime
versioni e con lutilizzo di molti plugins il carico sulla cpu sia maggiore di quello per altri cms.
Di base nato per server LAMP (Linux Apache Mysql PHP) ma ad oggi esiste anche la versione compatibile con database Windows SQL Server.

1.3 Database

La versione MySQL necessaria dalla versione 3.2 5.0.15.

1.4 PHP

Dalla 3.2 la versione PHP minima 5.2.4. Con versioni inferiori linstallazione viene fermata,
ed necessario scegliere una versione di wordpress precedente.

1.5 Moduli php

Per sfruttare correttamente Wordpress bene avere i seguenti moduli attivi nel PHP:
- mod_rewrite - cdata - curl (non sono tuttavia indispensabili)

1.6 Permessi

Linstallazione su server LAMP non necessita di modifiche ai permessi delle cartelle, tuttavia in particolari hosting necessario settare manualmente i CHMOD a 755 sulla cartella
wp-content che si trova in radice dellinstallazione, per poter caricare temi e plugins o foto
dallinterfaccia gestionale.

2) Installazione
2.1 I due metodi di installazione

Il metodo classico prevede di scaricare il file zippato da wordpress.org/download/,


scompattarlo e caricare i files e le cartelle sul proprio server. In locale pu essere
installato sfruttando XAMPP. Wordpress pu tranquillamente essere installato in una
sottocartella. Uno stesso dominio pu ospitare infinite installazione diverse, anche
con un unico database. Dalla versione 3.2 Wordpress anche fruibile in versione
Multi User, precedentemente separata ed accessibile scaricando wordpress MU.
Per installare wordpress non necessario un account su wordpress.com.
E possibile anche aprire un blog gratuito hostato come sottodominio su wordpress,
ma non consente grandi personalizzazioni.

Installazione manuale:

Si scarica gratuitamente da wordpress.org/download/ . Da un anno disponibile anche una versione nativa in italiano, reperibile allindirizzo it.wordpress.org/
Con il metodo classico, prima di proseguire, occorre creare un database mysql ed un
utente per wordpress, annotando i parametri daccesso per il wizard che verr poi.
La radice delle tabelle un parametro indispensabile per la convivenza nello stesso
database di pi installazioni, pertanto scegliamo una radice descrittiva per la finalit
dellinstallazione in corso.
Dopo aver copiato i files sul proprio server (ad es. su www.miosito.it) bisogna immediatamente accedere allindirizzo del sito, in quanto bisogna ultimare subito linstallazione. Non facendolo diamo la possibilit ad altri di collegare il sito ad un proprio
database popolandolo con i propri contenuti.
Accedendo allurl di upload avremo da completare circa 4 step del wizard di installazione. Ci verranno chieste informazioni di base che potremo modificare in qualunque
momento. Per ultimare linstallazione occorrer inserire i dati di accesso al database
e scegliere un nome utente e una password.
Ultimato il percorso di installazione il wizard creer un file wp-config.php in radice
del sito, contenente i dettagli di collegamento al database. Lo stesso wp config contiene alcune chiavi criptate che sono destinate a livelli maggiori di sicurezza, la cui
compilazione facoltativa.

NB: al termine dellinstallazione, wordpress cerca di inviare allamministratore una mail con i dettagli
di accesso. Quando effettuiamo linstallazione in locale con xampp, il modulo mail di php disabilitato, pertanto normale un errore nellinvio dei dettagli di accesso.

Installazione automatica:

Il secondo metodo di installazione, quasi sempre disponibile negli hosting con cpanel, fatta mediante installatron, una piattaforma per linux che effettua automaticamente installazione del cms e creazione dei database.

2.2 Linterfaccia di backend

Appena ultimata linstallazione verremo reindirizzati alla sottocartella wp-admin,


contenente linterfaccia gestionale che consente pieno controllo su tutto il sito wordpress, ed anche su altri files caricati via ftp che si trovino nella cartella di installazione di wordpress.
Linterfaccia completamente customizzabile in quanto a layout e colori. Il suo utilizzo prevede javascript attivato ed un browser che supporti jquery e ajax.
Sulla colonna sinitra troviamo le voci principali: articoli, media, pagine, commenti,
link, aspetto, plugin, utenti, strumenti, impostazioni.
La prima pagina che vediamo quella denominata bacheca. La baceca altamente
personalizzabile per vedere a colpo docchio tutte le informazioni che riteniamo importanti: statistiche, commenti, nuovi articoli, pingback da altri siti o quello che vorremo mettere, come ad esempio anche il meteo.
Tutte le parti del gestionale sono drag and drop.
Ciascun gruppo di voci del menu racchiude un sottomenu, espandibile con la freccia
di ciascun pulsante. Sulle funzioni delle varie voci torneremo tuttvia pi tardi.

2.3 Utenti e permessi


Wordpress prevede di default 5 livelli di utenza:
1. Autore
2. Editore
3. Autore
4. Collaboratore
5. Sottoscrittore
Lamministratore ha pieni poteri gestionali sulla struttura e sui contenuti, leditore pu pubblicare e cancellare contenuti o inserirne di nuovi ma non modificare la
struttura del sito. Lautore pu solo postare contenuti e non modificarli o pubblicarli.
Gli altri ruoli sono relegati allaccesso alla bacheca di wp-admin e allinserimento di
commenti agli articoli.

2.4 Setup di base


Ci sono alcune informazioni di base che bene impostare subito in quanto da queste
dipendono le prossime impostazioni che dovremo fare sulla struttura del sito, sui
plugins, sui temi e quantaltro.
Prima di tutto, se siamo su un nuovo dominio, probabilmente non vogliamo che Google indicizzi il sito in costruzione. Sotto alle impostazioni, alla voce privacy, escludiamo gli spider dal visitare le nostre pagine.

In secondo luogo andiamo alla voce Generale e verifichiamo di aver compilato titolo e sottotitolo, che bne non siano uguali.
Verifichiamo che la data sia in italiano, che i nuovi utenti vengano creati come sottoscrittori e che la mail del sito sia corretta.
Questo indirizzo viene usasto, in mancanza di altre configurazioni, com mittente dei
messaggi dal sito.
La terza cosa da verificare si trova alla voce permalink. I permalink sono gli url delle
pagine. Se il mod_rewrite di php attivo e se il server accetta il file .htaccess bene
attivare la riscrittura degli url.
Purtroppo nessuna delle varie opzioni presenti di default valida a fini SEO.
La migliore struttura dei permalink va impostata in modo custom, ed
%category%/%postname% oppure /%year%/%monthnum%/%postname%/ nel caso
il sito sia un blog in cui la datazione temporale molto importante.
I permalink sono una caratteristica fondamentale per i motori di ricerca per indicizzare e valorizzare correttamente i contenuti del sito.
Alla vode ciscussione possiamo poi decidere se vogliamo che gli utenti possano commentare gli articoli e le pagine, se devono iscriversi per commentare o inserire un
nome e una mail.
Lo spam sui siti wordpress con commenti abilitati assicurato, quindi bene installare qualche plugin adatto. Se ne trovano molti di gratuiti.

2.5 Rendere il sito privato

Se il sito in fase di sviluppo possiamo impedire che gli utenti entrino mediante un
plugin gratuito che si chiama maintenance mode, che restringe laccesso allamministratore. Altrimenti se vogliamo far accedere un cliente al sito mantenendolo privato
si consiglia un plugin che si chiama password protect wordpress che consente di
entrare anche con password diverse dallamministratore, creando utenti appositi.
Ricordiamo di blindare laccesso ai motori di ricerca dal pannello privacy per impedire lerrata indicizzazione iniziale, molto dicile da aggiustare in seguito.

2.6 Wp-config.php

Il file in questione si trova in radice del sito e contiene i dati di connessione al database. Nel caso di spostamento del sito suciente aggiornare tale file. Una volta
aggiornato, dopo lo spostamento del sito possibile aggiornare i parametri relativi al
dominio dal pannello generale che sta sotto alle impostazioni.
Replicando il database ed aggiornando i parametri in wp-config possibile entrare in
wp-admin anche senza aggiornare i dati manualmente nel MySQL.

3) Il funzionamento di base
3.1 Articoli

Gli articoli sono il contenuto di base di wordpress, seguiti dalle pagine. Gli articoli e le
pagine sono entrambe salvati nella tabella post (wp_post se avete scelto wp_ come
radice delle tabelle).
In database i post differiscono solo per il parametro post_type, che previa espansione consente di accogliere anche contenuti classificati in modo diverso da post e
pagine, come vedremo in seguito.
I post, ovvero gli articoli, sono contenuti caratterizzati da una data di pubblicazione,
requisito fondamentale che wordpress iumpiega per la classificazione temporale dei
nuovi testi.
Per creare un nuovo articolo possiamo trovare la voce aggiungi nuovo nel menu a
sinistra, nel gruppo articoli.
In Wordpress gli articoli devono sempre appartenere ad una categoria (che vedremo
inseguito). Nel caso non venga specificata una categoria dal pannello a destra nella
pagina di creazione di un nuovo post verr selezionata la categoria di default, che in
una nuova installazione uncategorized. E bene sempre aggiornare tale categoria
al fine di non renderla visibile agli utenti. La categoria di default bene che sia quella
di cui posteremo il maggior numero di articoli.
Ogni post pu essere accompagnato da dei tag. I tag servono ad etichettare il contenuto ed ogni post pu avere un numero X di tags. E bene che questi siano pertineti
al contenuto e che non siano pi di una decina, a meno di scelte particolari a fini
SEO.
Quando scriviamo un articolo possiamo pubblicarlo immediatamente o salvarlo
come bozza per pubblicarlo in seguito, o schedulizzare la pubblicazione.

3.2 Pagine

Le pagine sono, di default, relegate ad una posizione subordinata da wordpress. Solo


nelle recenti installazioni, visto il gran numero di impiegi possibili di questo CMS,
hanno assunto una rilevanza maggiore ed anche linterfaccia gestionale ne consente
una gestione pi articolata.
Una pagina strutturalmente identica ad un post tranne che per alcuni fattori fondamentali: non temporalmente caratterizzata, non appartiene ad una categoria, non
pu di default ricevere tag (ma con dei plugin si) e, cosa pi importante, pu avere
una gerarchia.
Le pagine possono infatti essere organizzate ad albero e costituire la struttura fondamentale di un sito istituzionale, mediante la creazione di menu contestuali gerarchici.

3.3 Autori

Lautore di un articolo o pagina di default lutente con cui si loggati al momento


dellinserimento. Per modificare lautore, a meno dellimpiego di plugin esterni, necessario accedere alla modifica veloce dalla lista degli articoli pubblicati.
8

3.4 Multimedia
Wordpress di default multimediale. Consente una gestione dinamica ottimale di
audio, video e , naturalmente, foto.
La gestione dei files multimediali pu avvenire in modo diretto tramite la sezione
media del menu laterale. Possiamo caricare senza limitazioni ogni tipo di file. Il
limite di upload di base 64 Mb a meno di restrizioni ulteriori del server.
Dalla versione 2 di wordpress lupload dei files avviene mediante un flash uploader,
che possiede una variante ajax disponibile con plugin esterni.
Alcuni browser o alcune configurazioni di rete bloccano lupload flash pertanto possiamo scegliere in ogni momento di caricare i files con il cosiddetto uploader classico, un normale form con invio html dei files.
Ogni file che viene caricato mediante linterfacia media ha una corrispondenza in
database nella tabella *_posts con parametro post_type con valore attachment,
e specifica sul tipo di file nel campo post_mime_type.
Ogni file caricato pu avere un titolo, una descrizione e tutta unaltra serie di parametri. Mediante plugin aggiuntivi possiamo gestire al meglio anche file video, audio o
altro.
Esistono anche plugin per la modifica in realtime dei files, e persino una sorta di
photoshop per wordpress. Sono molto utili se la gestione dei files deve essere adata a personale che non dispone di softwares esterni.

3.5 Versioni e revisioni

Pagine e post sono sempre backuppati di default da wordpress, che ad intervalli di


tempo regolari esegue una copia di backup nel database, con id diverso da quello del
contenuto originale.
Ogni pagina o post pu essere ripristinata ad esempio nel caso il browser si chiudesse o saltasse la corrente.
Per recuperare versioni precedenti di un contenuto necessario accedere allo stesso
da gestionale in modalit modifica e scorrere la pagina in basso, dove vedremo la
serie di revisioni precedenti.
Tale meccanismo, per quanto comodo, genera unenorme quantit di immondizia
nel database. Per qusto motivo, una volta backuppato il database, possiamo periodicamente effettuare una pulizia mediante il plugin wp-clean. Tale plugin elimina
tutte le revisioni del database per pagine ed articoli, tutti i contenuti cancellati (che
permangono sempre in database altrimenti ed altri record inutilizzati) he appesantiscono il sito.
Se per caso abbiamo fatto modifiche che vogliamo annullare e tornare ad una versione precedente possiamo farlo sempre a meno che non abbiamo pulito il database.

3.6 Autosave
Wordpress effettua dei salvataggi automatici ogni 30 secondi se rileva modifiche
quando siamo in modifica di un contenuto. Tale funzionalit pu essere disabilitata
o gestita in modo diverso mediante il plugin gratuito WP Auto Save Management.
Se ad esempio scrivete i contenuti direttamente in wordpress si consiglia un plugin
come questo per evitare di generare 10 copie di backup in mezzora e riempire il database di immondizia.
Quando per caso usciamo senza salvare le modifiche, rientrando in modifica di quello stesso contenuti comparir lavviso vi un salvataggio automatico... che consente
di recuperare eventuali modifiche non salvate.

3.7 I post meta


Un post meta non altro che uninformazione aggiuntiva personalizzata che possiamo associare ad ogni post o pagina.
Un post meta un record salvato nella tabella *_postmeta. Questa tabella associa ad
un qualsivoglia contenuto della tabella *_posts una variabile composta da un nome
variabile (campo meta_key) ed un valore ad essa attribuito (meta_value).
Per creare nuovi postmeta possibile usare un pannello di default che troviamo
nellinterfaccia di creazione e modifica articoli e pagine, sotto al campo di testo principale. Possiamo usare qualunque valore per il nome e per il valore. Il nome del
postmeta deve essere richiamabile come variabile nel php per determinate funzioni,
quindi come meta_key bene evitare punteggiatura.
Ad ogni post o pagina possono essere associati un numero infinito di postmeta.
Nel database il post associato al postmeta definito dal campo post_id
Un postmeta appartiene solo ad un unico post (o pagina).

3.8 Le categorie
Le categorie servono a raggruppare gli articoli rapidamente, aiutano il lettore nella
ricerca e mantengono ordinato il sito. Wordpress di default, e quasi tutti i temi, sono
predisposti per organizzare i contenuti degli articoli in categorie.
Le categorie possono essere annidate (gerarchicamente) e possono essere visualizzate in qualunque punto di un tema.
La differenza dai tag riassunta da wordpress nel seguente esempio: se scriviamo la
ricetta di un dolce e lo mettiamo sotto la categoria dolci, possiamo usare tag come
cioccolato, biscottini, glassa.
Ogni articolo pu appartenere a ciascuna categoria presente in archivio, senza limitazioni. Nel caso di categorie gerarchizzate, quasi sempre bene infatti includere larticolo anche nella categoria madre pi generica.
Le categorie possono essere aggiunte al volo in fase di creazione di un post.
10

4) Ottimizzazione di base
4.1 Plugin SEO fondamentali
Se fate un sito commerciale, deve essere trovato.
Tra migliaia di plugin SEO, dopo anni di esperienza, ecco quelli che consiglio come
fondamentali:
- Platinum SEO
- Quick Cache
- DB Cache Reloaded
- Smart 404
- Post Teaser
- SEO Smart Links
- SEO Search Terms
- Post control core
- Post control
- XML Sitemap
- 404 report
- Similar Posts

4.2 Plugin di backup


Il backup pu essere effettuato in mille modi, oltre a quello manuale da MySQL e da
FTP chiaramente. Nel caso vi interessi salvare le cose fondamentali, ovvero database,
plugins, tema e uploads, il migliore plugin per il backup schedulizzato indubbiamente Wordpress Backup (by BTE)
Questo plugin effettua un dump del database schedulizzato e lo invia via mail, cos
come per le cartelle temi,plugins e d uploads,che vengono zippati e spediti via mail.
Molti altri plugin sono instabili e non funzionano molto, quindi li sconsiglio personalmente.
Per particolari esigenze vi anche un plugin sviluppato da me che fa un dump completo del database, uno zip di tutto il sito e salva tutto via ftp su un altro server.
Questo vi garantisce che non perderete mai alcun dato, anche se un po pesante
per il server.
In alternativa possiamo fare un backup mediante le funzioni native di wordpress, che
troviamo alla voce Strumenti -> Esporta.
Lesportazione un file xml standard privo di Junk che possibile importare in un
altro blog anche non wordpress. Non salva molte delle tabelle create dai plugins,
pertanto non il metodo pi accurato e sicuro. E perfetto per unesportazione di un
blog semplice.

11

4.3 Migliorare la sicurezza


Wordpress un programma open source, pertanto la presenza di falle nella sicurezza
rispetto ad eventuali exploit, spece inerenti sql injection e manomissione della struttura divengono automaticamente di dominio pubblico in tempi rapidi.
Rispetto alle prime versioni la sicurezza stata notevolmente incrementata, inoltre
gli aggiornamenti regolari riparano tutte le situazioni di rischio che il popolo di internet individua puntualmente.
Possono tuttavia sempre esserci falle impreviste, e le vulnerabilit sono quasi sempre di tre tipi, pertanto ora le prenderemo in esame e vedremo come isolarle.
Gli attacchi sferrati verso wordpress sono principalmente sql injection. Dallultima
versione (3) necessario mysql 5.0.15 pertanto gi molte delle injection pi comuni
sono ora impossibili.
Per la sua natura molto aperta vi sono tuttavia particolari query che possono trovare accesso al database.
Lo scopo primario del 99% degli attacchi a wordpress non distruggere un sito, ma
semplicemente iniettare contenuto spam al suo interno.
I contenuti sono per lo pi link a siti spam, porno o illegali, e possono essere iniettati
in 3 modi diversi: nei post, nei commenti e nel template (il tema).
Il primo metodo molto dicile da attuare, perch richiede di bypassare la sicurezza di wordpress conoscendo la password.
Per essere attuato solitamente vengono impiegati software di brute force, in quanto
di base wordpress non prevede numero massimo di tentativi per il login.
Pi avanti vedremo come risolvere tale bug.
Il secondo metodo, riguardante i commenti, solitamente attuato con bot che
spammano globalmente miliardi di siti al giorno, con lobiettivo di postare commenti
ricchi di link e contenuto spam. Tale problema pu essere ovviato chiudendo i commenti, restringendo il commento ad utenti registrati o richiedendo la moderazione
per ogni commento. Tuttavia ormai questo non basta, perch ci sono software per
spamming che in automatico effettuano la registrazione sui blog (anche con double
opt-in) e procedono allinserimento dei commenti spam.
Per tale motivo lunica soluzione ricorrere a plugin per evitare lo spam come
captcha o il servizio akismet di wordpress, il quale richiede lattivazione di un account
wordpress.org per la ricezione dellAPI key.
Attenzione ai captcha: la maggior parte dei software per spamming li decripta in automatico.
Nei commenti possono inoltre essere inseriti tentativi di injection.

12

Il terzo metodo, ovvero la modifica del tema wordpress per linserimento di contenuti malevoli, che possono andare dai semplici link alliniezione di virus o sniffer, viene
attuato sfruttando degli exploit della funzione per la modifica del tema che vi nel
pannello amministrativo di wordpress.
Tale funzione tra le vulnerabilit maggiori del cms, in quanto prevede la modifica
diretta dei files presenti nel server, e le query di modifica, essendo piene di codice
html, php e js native nei files del tema, non soggetta alla messa in sicurezza che
wordpress attua sempre sui dati in post mediante la funzione sanitize.
Nella pratica quindi molto facile hackerare un tema, mentre molto dicile hackerare i contenuti.
Una soluzione molto ecace contro questi problemi il plugin WP Firewall. Tale
plugin gratuito impedisce tutte le query contenenti codice pericoloso, tuttavia il suo
funzionamento preclude anche le funzioni che espongono il sito agli attacchi.
Dopo installato il plugin, infatti, non sar possibile usare la funzione per la modifica
dei files del tema dallinterfaccia wordpress.
Nel caso servissero funzioni bloccate, possiamo sempre disattivarlo temporaneamente.
Si possono anche impostare dei report via mail in caso di attacchi. Nel report sono
anche riportate le query che hanno scatenato lallarme.
Ulteriori livelli di sicurezza possono essere raggiunti mediante restrizioni da applicare
al file .htaccess.

13

5) I temi
5.1 Struttura di base di un tema
Questo argomento molto vasto, e per una rapida panoramica si consiglia questo
articolo:
http://yoast.com/wordpress-theme-anatomy/
Analizziamo tuttavia gli aspetti principali di un tema di wordpress.
Wordpress consente di tenere in archivio X temi, ovvero grafiche, e possono essere
attivati con un click.
Un tema , nella pratica, il modo di presentare i contenuti. E composto da files CSS e
PHP, in pi a volte contengono anche files JS.
Le sue parti in PHP richiamano mediante funzioni o placeholders i contenuti che lengine di wordpress ha gi preparato in anticipo, e sui quali sono gi state applicate le
mutazioni richieste dai vari plugins.
Il tema quindi lavora solo in fase di realizzazione della pagina finale, mentre i dati
sono sempre ricavati e assemblati a monte.
Wordpress consente, di default, la distinzione tra 4 templates diversi allinterno di un
tema, destinati alla visualizzazione dei diversi tipi di contenuto: home page, articoli,
pagine ed archivi:
- index.php
- Single.php (usato per mostrare i contenuti di un singolo post)
- Page.php (usato per visualizzare le pagine)
- Archive.php / category.php / tag.php (che visualizzano liste di contenuti)
Non eseste una struttura canonica per i templates di un tema, potremmo anche
usare 10 templates o solo uno. Si distinguono templates diversi solo per migliorare la
visualizzazione e rendere pi agevoli gli interventi di manutenzione del php.
Possiamo infatti avere anche temi fatti da 1 solo file (index.php) che verrebbe usato
di default per la rappresentazione di tutte le tipologie di contenuto.
Vi sono poi altre pagine che possono facoltativamente essere impiegate:
- 404.php (usata per gli errori 404)
- author.php (impiegata di default per visualizzare il profilo di un autore)
Nota: un tema pu prevedere infiniti modelli (templates), e mediante un plugin aggiuntivo specifichiamo quale modello vogliamo utilizzare per ogni singola pagina,
salvando tale informazaione come postmeta associato alla pagina o al post.
Per assurdo, potremmo avere un sito con 10 post identici e visualizzare ognuno con
un layout diverso. La stessa differenziazione pu essere operata con lintero tema,
cambiando tema per ogni post.
14

I requisiti fondamentali per un tema sono solo 2: il file index.php ed il file style.css
Tali files devono risiedere in radice del tema, ed il tema deve stare in wp-contents/
themes/
Wordpress trova i temi analizzando, nella cartella themes, i file style.css che trova
nelle cartelle.
Un tema viene ritenuto tale quando lo style.css contiene, allinizio del file, i tag descrittivi, che sono i seguenti, messi sottoforma di commento:
Theme Name: Tema XXXX
Theme URI: http://wordpress.org/
Description: Theme for Unoformat
Author: Igor Nardo - Andrea Cinque
Version: 1.0
License: reserved
Solo il tag theme name obbligatorio, gli altri sono omissibili.
Anch wordpress infividui un tema come tale, quindi, dobbiamo avere una cartella
contenente un file style.css che contenga questo codice:
@charset utf-8;
/* CSS Document */
/*
Theme Name: Tema Unoformat
*/
Scritto questo, il file style.css pu essere vuoto, e possiamo anche mettere tutti i css
in una sottocartella diversa.
La parte dinamica del tema, ovvero il PHP, solitamente composto da 4 elementi:
- header.php
- the loop
- sidebar.php
- footer.php
Queste parti sono solitamente divise in files diversi, e wordpress si aspetta che sia
cos quando deve includere nel tema i vari plugins.

15

5.2 Le componenti del tema


Il tema composto da vari templates (modelli) per i vari tipi di pagina.
Ogni template un file che comprende HTML e PHP, e rappresenta la struttura finita della pagina quando viene visualizzata.
Le parti base di un template sono:
- header
- loop
- sidebar
- menu
- footer
Queste parti spesso non sono ripetute in ogni template del tema, ma vengono scorporate e incluse dal template principale con le funzioni native di wordpress, come
get_header(), get_footer ecc...
Header, footer e sidebar, solitamente, sono infatti in fils separati che devono chiamarsi header.php, footer.php e sidebar.php, per essere inlusi automaticamente.
I nomi di questi files sono previsti di default e non possono essere modificati, tuttavia possiamo creare e includere files php standard ulteriori di nostra creazione.

functions.php
Il function.php un file opzionale (ma ormai obbligatorio) mediante il quale possiamo estendere le classi native del core di wordpress, inserire nuove sidebars e menu,
o specificare al volo interventi dinamici sui contenuti, inserendo funzioni collegate
agli hooks di wordpress.
Vedremo in seguito il funzionamento del file functions.php in modo pi specifico.

5.3.1 header.php
In questo file ci sono solitamente tutti i tag html di apertura della pagina, dal doctype
alla chiusura del </HEAD>
E fondamentale che la chiusura dellhead sia inclusa nel file header.php perch
usato come tag di riconoscimento per tutti i plugin che devono inserire nuovi contenuti nellhead dellhtml.
Tuttavia nellheader.php possibile proseguire lhtml aprendo il <BODY> e scrivendo
cos una sola volta tutta la parte di html e php che dovr essere ripetuta in tutti i templates del tema, come logo, menu, eccetera...
Nellheader, come in tutte le altri parti del tema, possiamo inserire ogni tipo di html e
php, js o css che vogliamo, senza restrizioni.
In questo punto non possiamo per inserire contenuti che devono essere ricavati
allinterno del LOOP di wordpress, che non sono qui disponibili.

16

5.3.2 Il loop
The Loop la parte pi complessa del tema, e prevede per ciascuna pagina un
lavoro di estrazione e rappresentazione dei contenuti dinamici mediante le funzioni
native del core.
Il loop inizia con una query che determina quale pagina (o gruppo di pagine) dobbiamo estrarre. E basato su un ciclo WHILE e finisce con un ENDWHILE. Il file che
contiene il loop deve contenere, allinterno di tale elemento, tutto il codice necessario
per visualizzare le parti realizzate dal loop, come titolo, contenuti testuali, categorie e
tags, estrazione dei postmeta, estrazione dellautore e quantaltro.
Per ciascun tipo di pagina (ovvero tipo di template allinterno del tema) possiamo
estrarre parti diverse dal loop, ad esempio possiamo fare in modo che le pagine
visualizzino solo il titolo ed il contenuto testuale, e ricavare invece autore e categorie
per gli articoli.
La struttura dei templates del tema pu importare esternamente la parte relativa al
loop.
Wordpress ad esempio, qualora debba visualizzare una pagina, user di default il
modello page.php.
In page.php tuttavia possiamo, per tenere il codice in ordine, inserire solo il richiami
per header, footer, loop e sidebar.
Per importare uno specifico loop basta chiamare il loop loop-page.php o loop-single.php e richiamarlo scrivendo, allinterno del template, il seguente comando:
get_template_part( loop, page );
In automatico wordpress importer, in quel punto, il file loop-page.php
Il secondo parametro della funzione get_template_part pertanto la specifica del
loop da importare, che corrisponde alla parte di nome del file separata dal trattino -
Uno stesso template pu contenere istruzioni condizionali per importare loop diversi,
come la seguente, usata per scegliere un loop custom sono nel caso dellhome page
<?php
if(is_front_page() ){
get_template_part( loop, index );
}else{
get_template_part( loop, page );
}
?>
NB is_front_page una funzione nativa che true qualora la pagina sia quella selezionata
da gestionale come home page del sito.
17

Estrazione dati dal loop

Ci sono funzioni di 2 tipi: get_XXX e the_xxx


Quando vogliamo usare un valore come una variabile usiamo get_xxx (come get_title) se invece vogliamo che il valore venga printato, usiamo the_xxx (come the_title)
e non ci servit il comando echo().
I tag principali che possiamo usare in un template sono:
get_header
get_footer
get_sidebar
get_template_part
get_search_form
wp_loginout
wp_logout_url
wp_login_url

wp_login_form
wp_lostpassword_url
wp_register
wp_meta
bloginfo
get_bloginfo
get_current_blog_id
wp_title

single_post_title
single_cat_title
single_tag_title
single_term_title
single_month_title
get_archives_link
wp_get_archives
calendar_week_mod

get_calendar
allowed_tags
edit_bookmark_link
edit_comment_link
edit_post_link
edit_tag_link
get_admin_url
get_home_url

5.3 Le sidebars
Una sidebar unarea dellhtml atta ad ospitare i cosiddetti widget, che sono porzioni di codice statico o dinamico selezionabili dal pannello di amministrazione di
wordpress.
A scapito del nome non deve necessariamente essere su una colonna, ma pu stare
dovunque nel template.
Un tema pu avere infinite sidebars.
Per inserire nellhtml una sidebar dinamica (precedentemente abilitata) basta inserire questo codice di esempio:
<?php dynamic_sidebar(nomesidebar_custom); ?>
In questo modo verr inserita la sidebar che nel gestionale compare come
nomesidebar_custom.
Nel caso ad esempio volessimo avere pi di una sidebar, suciente inserire questo
codice nel file functions, che vedremo dopo:
register_sidebar(
array( name => login_sidebar);
);
Nel pannello gestionale per linserimento dei widget troveremo immediatamente una
nuova sidebar disponibile e pronta ad accogliere i widget o del testo.
Se volessimo specificare del codice html che delimiti automaticamente la sidebar,
come div o liste, possiamo aggiungere alla funzione register_sidebar alcuni parametri opzionali:
register_sidebar(array(
name => login_sidebar,
before_widget => <div class=login>,
after_widget => </div>,
before_title => <h2>,
after_title => </h2>
));
18

5.4 I menu
Per divenire pi CMS che BLOG, dalle ultime versioni wordpress, ha ideato una gestione customizzata dei menu.
I menu sono liste non ordinate di elementi linkabili che pu essere customizzata inserendo manualmente le voci prescelte dalla lista di pagine e categorie, oppure inserendo manualmente link a qualunque url.
Possiamo inserire infiniti menu nel tema. Per far comparire lopzione dei menu sul
gestionale wordpress, che compare nel menu a sinistra di wp-admin sotto la voce
aspetto, dobbiamo usare il file functions.php del tema inserendo, ad esempio, questo codice:

function funzioni_post_setup() {
add_theme_support( menus );
}
add_action( after_setup_theme, funzioni_post_setup );
La funzione add_action il metodo impiegabile per agganciarsi agli hook di wordpress, ovvero eseguire la funzione specificata al secondo parametro di add_actions
quando wordpress si trova nella condizione after_setup_theme, che per lappunto
un hook. Questo tema verr visto in seguito.
Linserimento del controllo post setup serve perch wordpress aggiunga i menu
solo dopo che il tema stato installato.
Per richiamare un menu inseriamo questo:
<?php
wp_nav_menu( array( menu => menu_pagina, container_class => menu-pagina ) );
?>

Dal gestionale dei menu dovremo assegnare al menu un nome uguale al parametro menu assegnato alla funzione wp_nav_menu (menu_pagina).
Tra i parametri accettati dalla funzione vi container_class, che attribuir direttamente la classe specificata al tag <UL> di apertura del menu.

19

5.5 Trovare un tema


Esistono milioni di temi online, la maggior parte dei quali gratuiti, e la maggior parte
dei quali inutili, obsoleti e tecnicamente pessimi.
Come trovare il tema adatto quindi?
Step 1: Definiamo COSA ci sar nel nostro sito: la struttura delle pagine, la struttura
dei contenuti, la profondit delle pagine e le categorie di articoli, se conterr molte
foto o video, a che target rivolto, e qual il mio obiettivo nel realizzare questo sito.
Definite queste caratteristiche, possiamo immaginare se vogliamo un tema a 2 o 3
colonne, o magari a colonna unica. Se abbiamo bisogno di qualcosa di particolare
come un tema per le foto con delle gallery flash o ajax, o se sar solo un sito di articoli dove prvilegiare la lettura ed i testi.
Ora che abbiamo le idee chiare, possiamo cercare un tema che faccia per noi.
Il primo posto dove cercarli wordpress.org. Per cercare temi qui, che sono gratuiti
ed approvati da wordpress (il che non significa che siano per forza di qualit eccezionale, anzi...) possiamo andare sulla ricerca di nuovi temi, sotto al menu aspetto ->
temi -> installazione temi
Cerchiamo quindi qualcosa usando il motore di ricerca dei temi presenti. Bisogna
usare termini generici, ad esempio red, 3 columns oppure newspaper o sport.
Una volta trovato un tema di prorpio gradimento possibile vedere unanteprima e
procedere allinstallazione. Si possono installare infiniti temi, compatibilmente con le
risorse dellhosting.
Qualora questo tipo di ricerca non abbia portato a buoni risultati, sar necessario
procedere con Google.
A tale scopo, bene sapere che esistono 3 tipi di temi in internet: free, premium (a
pagamento) e freemium, ovvero temi di qualit premium con features in pi che si
acquistano a parte, e spesso sono una buona opzione.
Per trovare un tema in un motore di ricerca bene inserire tra virgolette le parole
free wordpress theme seguite dalle parole specifiche di ci che cerchiamo, come
automotive o altro.
Se invece vogliamo un tema di ottima qualit, possiamo trovarne a cifre irrisorie (circa 30 $) sul pi grande marketplace mondiale di temi ed ani: Themeforest, che fa
parte del gruppo australiano Envato.

20

5.6 I diversi modi di installare un tema


1) Installarlo da wordpress cercandolo mediante il motore di ricerca che si trova in
wp-admin. E il modo pi rapido e sicuro. Attenzione: non tutti i temi sono compatibili
con tutte le versioni di wordpress.
2) Se il tema nel nostro pc, possiamo sempre dallinterfaccia di wordpress procedere allupload del file zippato. Attenzione: caricare solo files zip, non sono supportati
i rar. In questo sistema dobbiamo verificare che il tema scaricato sia effettivamente
solo la parte da caricare su wordpress: spesso quelli acquistati contengono, nella
cartella principale, varie sottocartelle con i sorgenti photoshop, manualistica, layout
statici e contenuti demo. In questo caso bisogna trovare la cartella che contiene index.php e style.css e zipparla, per caricare solo quella.
3) Il terzo metodo, il pi lento, caricare tutta la cartella manualmente, dopo scompattata, via FTP. La cartella del tema va caricata sotto a wp-content/themes.

6) I plugins

Usare wordpress senza plugins pressoch impossibile, proprio per la sua natura
scalabile secondo la quale le funzionalit di base sono estremamente ridotte e generiche. I plugins sono il modo naturale per adattare un sito wordpress alle proprie
esigenze, modificare il modo di visualizzare i contenuti, estendere le funzionalit,
migliorare lesperienza di navigazione.

6.1 Come trovarli, come sceglierli, versioni e compatibilit

Premesso che esistono plugins per tutto, il primo posto in cui cercarli indubbiamente wordpress.org.
Nella sezione plugin di wp-admin, alla voce Aggiungi nuovo, vi un motore di
ricerca molto pratico per trovare quello che ci serve.
Se ad esempio volessimo un plugin per creare le sitemap xml, ci basta scrivere xml
sitemaps per vedere varie opzioni possibili.
Per scegliere il migliore, possiamo basarci sulla descrizione, sul punteggio e sul numero di download (disponibile visualizzando i dettagli).
Un buon metodo scegliere quelli che hanno rating alto (le stelline) e molte valutazioni. Ci nonostante, non detto che poi il plugin sia quello che fa per noi. Bisogna
valutare la compatibilit con la versionedi wordpress installata e, una volta testato,
vedere se svolge le funzioni dichiarate.

6.2 Verificare le fonti

Quando scegliamo un plugin, nel caso il sito abbia una certa importanza e desideriamo garantire uno standard qualitativo nel tempo, bene verificare che i creatori dei
plugin abbiamo una certa adabilit, e che vi siano gli upgrade necessari nel corso
del tempo per fare fronte a successive versioni del cms. Per farlo, possiamo visitare
la home page del plugin dalla pagina dei dettagli dello stesso.

21

6.4 Testing

Prima di installare un plugin eseguire sempre un backup del database, per sicurezza.
Linstallazione identica a quella dei temi: possiamo installare i plugin dallinterfacciadi wp-admin, scaricarli e ricaricarli zippati sempre dallinterfaccia di wp-admin
oppure caricarli via ftp nella cartella wp-content/plugins, ed attivarli in seguito dal
gestionale.

6.5 Conflitti fra plugins e troubleshooting

Non tutti i plugin sono programmati in modo impeccabile, e pu capitare rare volte che linstallazione di un plugin progiudichi il funzionamento di un altro, o blocchi
lintero sito.
Vi sono alcuni plugins che per loro natura o perch scritti male confliggono.
Limportante sempre testare il sito dopo linstallazione, e fare attenzione ad eventuali avvisi di errore che potrebbero comparire in wp-admin.
Nel caso di conflitti, bene procedere alla disattvazione progressiva di tutti i plugin
installati fino a trovare quello responsabile, procedendo per esclusione.
In questo modo si noter anche se sia un plugin specifico a dare problemi o se sia la
convivenza di pi plugin insieme.
Nel caso di conflitti, spesso possibile trovare un plugin alternativo che non generi il
problema rtiscontrato.

6.6 Plugins minimi consigliati

Nelcaso di un sito web standard, visibile al pubblico, di contenuti misti (testi/immagini) vi sono alcuni plugin di base che bene installare:
Platinum SEO Pack:
Consente di specificare i meta tag html generali e per ogni pagina, consente di stabilire quali pagine indicizzare e come gestire altri meta tag importanti come il canonical
url.
Google XML Sitemaps:
Genera automaticamente la sitemap per Google, utile per indicizzare rapidamente i
contenuti, che va poi segnalata a Google mediante i webmaster tools.
Contact Form 7:
Consente di inserire facilmente un form contatti nelle pagine.
Clean Up:
Serve a rimuovere, mediante un pulsante nella bacheca del Wp-admin, tutte le informazioni vecchie e inutili dal database, come le revisioni ed i post cancellati.
Post teaser:
consente una migliore gestione dellabstract dei post da mostrare nelle liste di articoli, che evita la visualizzazione di contenuto duplicato o dei post interi nelle liste.
Wordpress Backup (by BTE):
un ottimo gestore dei backup, che invia per e-mail le parti di wordpress backuppate a
intervalli regolari predefinibili.
22

WP Missed Schedule:
I post schedulati di wordpress hanno spesso il problema di non venire pubblicati al
momento schedulato, questo per un conflitto tra le impostazioni della maggior parte
degli hosting ed il funzionamento base dei post schedulati. Questo plugin risolve il
problema, garantendo la pubblicazione.
Wp Super Cache:
E un modo ecace per preservare le prestazioni del sito anche con grande carico di
visitatori. Wordpress notoriamente un CMS pesante senza plugin di caching, per
questo WP Super Cache fortemente consigliato anche dal team di Automattic.
DB Cache reloaded:
Riduce vertiginosamente il carico sul server cachizzando tutte le chiamate al database. E possibile specificare a quali tabelle fare empre chiamate realtime senza cachizzarle.

7) Functions.php
Importante: le estensioni vengono inserite mediante hooks. Sfruttando gli hooks di
wordpress possiamo modificare le funzioni di base, ma per conoscere la loro lista
completa possiamo visitare questa pagina:
http://codex.wordpress.org/Function_Reference
Il file functions.php non deve essere incluso manualmente nel template, la sua presenza nella cartella del tema ne causa lautoinclusione.

7.1 Come estendere i campi custom: i postmeta

I postmeta sono variabili aggiuntive associate alle pagine che consentono di creare
nuove coppie nomecampo-valore molto utili per arricchire la struttura delle pagine
con nuove caratteristiche.
Nel caso i postmeta vadano inseriti a mano, ci viene incontro un eccellente plugin
chiamato More Fields. Tramite More Fields possiamo creare gruppi di postmeta
per ogni tipo di dato possibile, come numeri, testo o altro.
Mediante i postmeta possiamo, ad esempio, specificare unimmagine come in primo
piano per un post, estendere i campi presenti per creare un gestionale di annunci,
inserire specifiche tecniche di prodotti e molto altro.

7.2 Creare nuovi tipi di pagine (diversi da post e page)


Come gi acennato, post e pagine sono strutture di dati che risiedono nella stessa
tabella del databaze (*_posts). Sempre nella stessa tabella sono salvati i dati relativi
ai media caricati. Ma allora perch non creare nuove tipologie di pagine ad-hoc?
Una simile ipotesi ci pu giovare se ad esempio volessimo fare un e-commerce: preservando loriginale funzione di post e pagine, possiamo creare una struttura ad hoc
chiamata prodotti in modo da distingure tali contenuti da quelli istituzionali.
23

Come fare?
Si usa la funzione register post type di Wordpress, che far comparire nel menu del
wp-admin la nuova voce relativa al custom post type.
I nuovi post type possono essere nominati a piacimento, tuttavia in wordpress buona rebola usare una radice che faccia riferimento al plugin per il quale il post type
stato generato. Se il plugin si chiama ad esempio ecommerce bene chiamare i
nuovi tipi di post non solo prodotti ma ecommerce_prodotti.
Esempio:
add_action( init, create_post_type );
function create_post_type() {
register_post_type( acme_product,
array(
labels => array(
name => __( Ecommerce Prodotti ),
singular_name => __( Ecommerce_Prodotti )
),
public => true,
has_archive => true,
)
);
}
Una volta aggiunto questo codice al file functions.php nella cartella del tema, troveremo nel menu a sinistra una nuova voce riportante il nome Ecommerce Prodotti,
che ci consentir di creare nuove pagine contraddistinte da questo post_type nel
database, che potranno essere estratte con query specifiche.
Questo ci consente anche, con il plugin more_fields, di inserire nuovi campi custome (postmeta) specifici per questa tipologia di pagina.
Con questo processo possiamo adattare facilmente wordpress ad accogliere qualunque tipo di contenuto.

7.3 Hooks
Gli hoocks sono letteralmente degli agganci tramite i quali estendiamo le funzioni di
wordpress. La documentazione uciale si trova qui:
http://codex.wordpress.org/Plugin_API
La lista delle action tipiche durante lesecuzione qui:
http://codex.wordpress.org/Plugin_API/Action_Reference

24

Gli hook ci consentono di modificare (pluggare) il funzionamento di wordpress o


aggiungere nuove funzioni senza editare alcun pezzo del codice nativo del core. Questo consente di mantenere le funzionalit custom che vogliamo implementare continuando ad aggiornare il core del CMS senza problemi, facendo attenzione al passaggio tra versioni molto diverse (alcuni hook vengono deprecati).
Questo uno degli aspetti che hanno fatto di wordpress il CMS pi usato al mondo.
Per sapere quali build di wordpress possono avere degli hoock, dovremmo analizzare tutti i posti in cui, nel core, troviamo:
apply_filters(),
apply_filters_ref_array(),
do_action()
do_action_ref_array()
Per fortuna possiamo trovare online una lista completa, grazie ad Adam Brown, nel
suo sito: http://adambrown.info/p/wp_hooks
Ci sono 2 tipi di hoocks: gli action hooks e i filter hooks.

ACTION HOOKS

Gli action hooks sono usati dove wordpress ci consente di infilare un pezzo del nostro codice allinterno di una funzione nativa.
Hanno principalmente 3 funzioni:
- Infilare un pezzo di html
- modificare lo stato di variabili globali in quel punto del programma
- modificare i parametri delle funzioni (do_action_ref_array() )
Gli action hooks si richiamano mediante la funzione add_action()
Questa funzione si aspetta 2 parametri:
- dove (quale funzione di wordpress estendere)
- cosa (quale funzione personalizzata eseguire)
A differenza dei filter hooks che vedremo poi, gli action hooks non devono per forza
avere un return della funzione, in quanto possono eseguire funzioni a s quali, per
ipotesi, un mail() o una qualche query custom al database.

In questo semplice esempio tratto dal codex di wordpress, vediamo come fare in
modo, tramite un hook, di ricevere una mail alla pubblicazione di un nuovo articolo.

25

class emailer {
function send($post_ID) {
$friends = bob@example.org,susie@example.org;
mail($friends,sallys blog updated,I just put something on my blog: http://blog.
example.com);
return $post_ID;
}
}
add_action(publish_post, array(emailer, send));
Questo add_action quindi si aggancia allhook publish_post ed esegue la funzione
send della classe emailer, nel momento in cui viene eseguita la funzione di pubblicazione.
Se quindi, ad esempio, volessimo includere del testo html extra come dei meta tag
html nellead del sito, possiamo estendere la funzione wp_head, con un hook come
questo:
function lamiafunzione (){
echo <meta name=miometa content=valoredel_meta />;
}
add_action( wp_head, lamiafunzione );

FILTER HOOKS
I filtri sono un po pi complessi degli action hooks. Un filtro una funzione che
viene eseguita allinterno di un normale ciclo di wordpress allo scopo di manipolare i
dati in corso di esecuzione.
Dove previsto, i contenuti possono essere quindi passati per funzioni da noi create,
custom, che devono restituire in output, mediante il comando return, i dati modificati che hanno ricevuto in ingresso.
Facciamo un esempio classico di filtro.
Fingiamo di voler eliminare dal testo di un post la parola banana.
La creazione del contenuto viene agganciata allhook the_content, pertanto ci servono 2 cose: la funzione di replace e lattivazione del filtro.

26

function togli_banana($content)
{
$content = str_replace(banana, ,$content);
return $content;
}
add_filter(the_content,togli_banana);
Con questo codice inserito nel file functions.php, da tutti i testi del sito verr eliminata la parola banana, senza che la cancellazione avvenga effettivamente nei dati del
database.
Ovviamente si possono operare trasformazioni molto pi complesse con i dati oggetto del filtro.

La priorit dei filtri


I filtri sono appesi alle funzioni in cascata. Questo significa che wordpress li applica
nellordine in cui sono inseriti nel functions.php . Tuttavia vi un parametro di priorit che pu essere incrementato per far eseguire un hook prima degli altri, sia esso
action hook o filter hook.
La priorit pu essere specificata con un numero intero come terzo parametro
dellhook:
add_action(wp_xxxxx , my_function, 20);

7.4 Shortcodes
Gli shortcodes sono sicuramente una delle migliori innovazioni delle ultime versioni
di wordpress. Assolvono ad una funzione fondamentale: inserire nel corpo delle pagine del contenuto dinamico parametrizzabile mediante un semplice placeholder.
Questo rende facile a chiunque funzioni complesse come inserire in un post una gallery fotografica, del codice html di youtube o ogni altro tipo di contenuto.
Uno shortcode ha questa forma:
[NOMESHORTCODE]
Il codice che vedremo a breve sostituisce automaticamente lo shortcode con il risultato della funzione corrispondente.
I parametri possono essere passati alla funzione mediante lo shortcode in questo
modo:
[NOMESHORTCODE MIAVAR=valore]
Vedremo ora come abilitare lo shortcode in questione, ad esempio per stampare in
un punto preciso del post la frase [NOME] mangia la mela.
27

Nel file functions.php abilitiamo lo shortcode, ed inseriamo una funzione che abbia
come return ci che noi desideriamo venga printato.
Ricordiamo che non sono filtri, pertanto il contenuto originale non viene modificato,
ma subisce solo laggiunta nel punto preciso dello shortcode.
Il return della funzione pu anche essere vuoto.
Fingiamo che nel corpo del nostro post abbiamo aggiunto lo shortcode
[MANGIA NOME=Marco]
Il nome dello shortcode MANGIA e il parametro si chiama NOME
function aggiungi_frase( $atts ) {
extract( shortcode_atts( array(
nome => gianni,
), $atts ) );
return $nome. mangia la mela;
}
add_shortcode( MANGIA, aggiungi_frase );
La funzion extract, molto utile usando gli shortcode, estrae larray bidimensionale
$atts che viene generato automaticamente al passaggio delle variabili mediante
shortcode, e genera una serie di variabili chiamate come il primo elemento di ciascun
record dellarray.
La variabile nome si chiamer quindi $nome nel resto della funzione.
nel caso sia vuota assumer il valore di default gianni.
Alla fine quindi, in un post dove avevamo scritto ad esempio:
Lerba verde il cielo azzurro, [MANGIA NOME=MARCO], meglio un uovo oggi che
una gallina domani.
troveremo scritto, in fase di visualizzazione del lato pubblico (NON DI EDITING!) questa frase:
Lerba verde il cielo azzurro, Marco mangia la mela, meglio un uovo oggi che una
gallina domani.

28

9 Plugins
9.1 Cos un plugin
Un plugin un codice autonomo che amplia le funzioni di base senza modificare il
core del software.
I plugin sono di molti tipi, ve ne sono milioni gratuiti ed anche alcuni a pagamento,
possono essere creati autonomamente o installati automaticamente dal gestionale
wp-admin.
I plugin sono installati nella cartella wp-content/plugins

9.2 Scrivere un plugin


Il file che definisce un plugin per wordpress il file php che contiene al suo interno i
tags di riconoscimento, inseriti nel php sottoforma di commento.
Per la creazione di un plugin serve minimo 1 file php con le intestazioni validate. le
intestazioni devono stare solo in un file. Il file con le intestazioni pu includere altri
files esterni, php, html o css.
Il file principale pu avere qualunque nome, non necessario che si chiami index.
php. Il nome della cartella del plugin non ha importanza.
Come i temi, un plugin pu essere caricato via ftp scompattato, oppure in forma zippata con luploader del wp-admin, o anche installato dal gestionale in modo diretto
con download automatico (qualora sia presente tra le risorse di wordpress.org).
Dopo linstallazione, il plugin deve essere attivato. Nel caso di errori di progrmmazione gravi wordpress impedisce lattivazione del plugin, specificando lentit e la natura
del problema.
Il plugin deve iniziare, come per i temi, con i tag di riconoscimento:
/*
Plugin Name: Nome del mio plugin
Description: Una descrizione significativa per convincere a scaricarlo
Author: Igor Nardo
License: GNU GPL
*/
Solo il Plugin name obbligatorio.
Un plugin pu contenere tutte le strutture prima elencate (hooks, shortcode e quanto altro) ma si mantiene separato dal tema e dal core, potendo essere attivato e
disattivato a piacimento.
Inoltre pu contenere ogni funzione custom desideriamo implementare, e pu ricavare informazioni dal database, come scriverne di nuove o modificarle, usando le
funzioni native di wordpress, senza dover scrivere manualmente le query MySQL.

29

9.3 Aggiungere un pannello amministrativo


I plugin possono avere o meno uninterfaccia gestionale nel wp-admin.
Il gestionale necessario qualora vogliamo salvare variabili di settaggio specifiche
per quel plugin, per le quali sono necessarie le procedure di creazione e recupero
delle variabili globali di wordpress.
Immaginiamo ora di voler creare un pluginche si chiama Website Settings, e serve a
salvare nel database wordpress le variabili generali che ci serviranno poi nel resto del
sito.
Per attivare la visualizzazione dellinterfaccia gestionale, e della voce di menu relativa,
il codice il seguente, e consente linserimento sotto al gruppo impostazioni della
voce Website Settings:
function website_settings_menu() {
add_options_page(Website Settings, Website Settings, manage_options,
website_ settings, website_settings_options);
}
add_action(admin_menu, website_settings_menu);
Come si vede sopra, con lhook admin_menu eseguiamo la funzione website_settings_menu che esegue la funzione add_options_page con i vari parametri necessari.
Dopo linstallazione del plugin, con questo codice, avremo aggiunto la voce Website
Settings al menu del gestionale, sotto al gruppo Impostazioni.

Lultimo parametro della funzione add_options_page definisce quale funzione dovr essere chiamata
dopo il click sul pulsante. Potremo quindi poi creare una funzione dal nome website_settings_options che stamper il codice da noi desiderato come interfaccia gestionale. In mancanza di tale
codice, nel gestionale vedremo tutto il codice html generato dal plugin.

Linterfaccia di backend del plugin:


Cosa vediamo cliccando la nuova voce Website settings ? Al momento, nulla.
Ma ci che vediamo in realt il codice printato dal plugin che stiamo scrivendo, e
questo plugin al momento non stampa altro che la voce di menu.
Linterfaccia del plugin, di base, stampa tutto il codice php e html che viene inserito
nel codice. Possiamo testarlo inserendo il codice echo ciao;.
Il nostro obiettivo ora visualizzare un form dove inserire le variabili da salvare.
Per creare il form in modo statico, ci basta interrompere il codice php ed inserirlo in
formato HTML puro nella pagina.
Tuttavia essenziale per la sicurezza garantire che solo un amministratore possa
accedere a questo modulo. Per questo motivo, creiamo la funzione richiamata dal
pulsante, ovvero website_settings_options, ed inseriamo un controllo al suo interno, per impedire che utenti non amministratori abbiano accesso al form di modifica.

30

function website_settings_options()
{
if (!current_user_can(manage_options)) {
wp_die( __(Non hai il permesso di accedere alla pagina) );
}
}
A questo punto, dopo lIF, possiamo aggiungere il form, ed il codice completo diverr
quindi il seguente:
<?php
/*
Plugin Name: Website Settings
*/
add_action(admin_menu, website_settings_menu);
function website_settings_menu() {
add_options_page(Website Settings, Website Settings, manage_options,
website_settings, website_settings_options);
}
function website_settings_options() {
if (!current_user_can(manage_options)) {
wp_die( __(You do not have sucient permissions to access this page.) );
}
?>
<div class=wrap>
<form method=post action=<?php echo $_SERVER[REQUEST_URI]; ?>>
<h2>Website Settings</h2>
<input type=text name=mia_var_generale />
<p class=submit>
<input type=submit name=submit value=<?php _e(Update options &raquo;); ?> />
</p>
</form>
</div>
<?php } ?>

31

9.4 Salvae le opzioni del plugin nel database


Giunti qui, avremo la voce relativa al nostro plugin nel menu laterale del wp-admin, e
cliccandola visualizzeremo un form con un campo di testo ed un pulsante submit.
Come vediamo nel codice, il submit viene eseguito alla stessa pagina che contiene il
form, pertanto possiamo inserire sempre qui il codice che salva la nostra variabile
mia_var_generale nel database.
Volendo salvare queste variabili come generali per tutto il sito, le dovremo inserire
nella tabella *_options , atta a contenere appunto le variabili che devono essere
reperibili in qualunque parte di wordpress.
Per fare ci, ci basta molto semplicemente usare la funzione
update_option();
Questa funzione scrive nella tabella *_options.
Questa tabella composta dai campi:
- option_id
- blog_id
- option_name
- option_value
- autoload

(chiave primaria)
(supporto multiuser per gestione di pi blog)
(nome della variabile)
(valore della variabile)
(se yes lopzione viene caricata da wp_load_alloptions() - yes di default)

La funzione update_option esegue 2 funzioni:


- genera un nuovo record nella tabella *_options qualora non sia presente un altro
con quello stesso option_value
- crea un nuovo record se non ve ne sono con quello stesso option_value
Per salvare lopzione a database, ci basta quindi inserire nel codice precedente quanto segue:
if ( isset ( $_POST [mia_var_generale] ) )
{
update_option ( mia_var_generale , $_POST [mia_var_generale] );
}
Se invece vogliamo leggere quellopzione salvata, in qualunque punto del tema, compreso nel plugin, possiamo reperirla con la funzione get_option(mia_var_generale );
Per popolare il campo del form di prima, quindi, ci basta inserire il valore in questo
modo:
<input type=text name=mia_var_generale value=<?php echo get_option(mia_
var_generale ); ?> />

32

9. Autenticazione mediante protocollo SOAP


9.1 Cos il protocollo SOAP

SOAP lacronimo di Simple Object Access Protocol , e rappresenta un procollo basato sul linguaggio XML per lo scambio di informazioni da parte delle applicazioni via
HTTP. Il protocollo SOAP una raccomandazione del World Wide Web Consortium
dal 2003 ed oggi uno dei metodi per permettere la comunicazione su internet dei
programmi attraverso il protocollo HTTP che certamente un protocollo supportato
da tutti i browser e da tutti i server permettendo quindi semplicit di utilizzo ed implementazione; inoltre SOAP basandosi sulla comunicazione HTTP permette linteroperabilit di differenti sistemi operativi con differenti tecnologie e differenti linguaggi
di programmazione.
Fonte: http://blog.glue-labs.com

9.2 Utilizzo con wordpress, plugin necessari

Lautenticazione SOAP con Wordpress consente ad utenti di un sito esterno di essere riconosciuti dal sito wordpress come utenti registrati presso lo stesso, pur senza
effettuare una reale registrazione.
Allatto della prima autenticazione, viene creato nel database wordpress un utente
corrispondente a quello che ha effettuato laccesso.
Per raggiungere questo obiettivo possibile usare il plugin WP Soap Authentication,
che una volta configurato ci agevola nellautenticazione SOAP.
Il plugin scaricabile gratuitamente dalle risorse di wordpress, o installabile dal pannello wp-admin.
Pe lutilizzo del plugin necessario, come da definizione del protocollo SOAP, che vi
sia a disposizione il servizio atto ad interrogare il database utenti originale, e restituire a wordpress la risposta SOAP XML necessaria.
Dopo installato il plugin e verificato la funzionalit del servizio, possibile configurare il pluin inserendo tutte le specifiche del servizio che dovr chiamare.
Bug del plugin e risoluzione
Il funzionamento di questo plugin ha un problema, pi che un bug, riguardante laccesso di utenti le cui credenziali siano cambiate nel database originale, oppure non
pi presenti in esso, ma solo tra gli utenti di wordpress.
Il plugin infatti progettato in modo che un utente, dopo la prima autenticazione, sia
in grado di autenticarsi su wordpress anche se non risulta pi tra gli utenti del servizio SOAP, o se le sue credenziali vengono modificate.
Nel caso Wordpress non sia gestito come sito a parte, e quindi la lista utenti debba
essere univoca, tale logica consentirebbe ad utenti eliminati di proseguire con laccesso al sito wordpress, e va pertanto modificata.
33

I plugin effettua laccesso mediante questa logica:


1- Tenta lautenticazione sul servizio SOAP, se va a buon fine crea lutente o accede
2- se lautenticazione SOAP fallisce, cerca tra gli utenti wordpress, e se esiste consente lautenticazione, anche se il servizio SOAP aveva risposto negativamente
Per evitare questo tipo di comportamento, dobbiamo fare in modo che il plugin, ricevuta risposta negativa dal SOAP, ricerchi il medesimo utente che si sta autenticando
allinterno del database di wordpress e lo elimini, senza consentirgli di accedere.
Tuttavia, vogliamo che lamministratore di wordpress possa accedere in ogni caso,
quindi anche se lamministratore non fosse registrato anche presso il servizio SOAP
lo stesso non deve essere eliminato da wordpress come altri comuni utenti dismessi.
Per fare questo, dobbiamo creare un else per lif
if (!is_null($user_role) && isset($userarray[ID])) {
ed inserire il codice seguente:
[... }else{ ] //continuazione dallif else
if($username!=get_option(UFS_username_admin))
{
$password=;
global $error_msg;
$error_msg = false;
global $error_type;
$error_type = noauth;
}
if($username==get_option(UFS_username_admin)){
global $error_msg;
$error_msg = $response[$options[response_msg]];
global $error_type;
$error_type = noauth;
}else{
global $error_msg;
$error_msg = false;//$response[$options[response_msg]];
global $error_type;
$error_type = noauth;
}
Questo codice resetta le credenziali daccesso per tutti gli utenti non admin nel caso
lautenticazione SOAP fallisca.
Nel caso poi lutente sia admin, prosegue con la funzione di autenticazione originale
di wordpress, consentendo laccesso allamministratore.
Cos facendo, ci garantiamo che accedano solo gli utenti che risultano ancora attivi in
base al servizio SOAP, e che lamministratoe possa sempre accedere al gestionale.

34