La presentazione “Wordpress come CMS” era quella che volevo fare al BzaarCamp. Per alcuni problemi la sessione è saltata e così, dopo quasi 2 anni, ho deciso di riproporla aggiornata in occasione del primo IWordCamp.
Un CMS, o Content Management System, è un software in grado di gestire la stesura e l’organizzazione dei contenuti di un sito web. Ad esempio WordPress è un CMS focalizzato sui blog, MediaWiki è un CMS focalizzato sui wiki, Drupal è un CMS focalizzato sui portali.
Le fondamenta di un CMS sono spesso molto simili, in quanto il tipo di contenuti da gestire sono sempre gli stessi: testo, immagini, video, audio, files vari. Anche la struttura logica non differisce sensibilmente.
La focalizzazione su uno scopo rispetto ad un altro significa che per quell’utilizzo lo strumento è molto più indicato e richiede molte meno modifiche per poter essere utilizzato in modo ottimale. Ad esempio un blog richiede in primo luogo di una ottima gestione di liste di post a cronologia inversa (dal più nuovo al più vecchio), un wiki sarà fondato sulle pagine modificabili da chiunque e sulla loro interrelazione, un portale avrà una maggiore necessità di struttura con sezioni, sottosezioni e strumenti di varia natura.
Da qui può nascere la domanda: perché allora utilizzare WordPress come CMS generico? La domanda mi è stata fatta dal vivo all’IWordCamp ed in effetti è l’unica cosa importante che sott’intendevo nella presentazione:
- WordPress: il software di WP è oggi molto evoluto e ricco di funzionalità che spaziano anche molto oltre ai limiti di un CMS dedicato ai blog. Anche se è famoso per questo, come piattaforma è molto flessibile anche per altri utilizzi, praticamente disponibili già out-of-the-box.
- Ecosistema: ci sono moltissime persone che ci lavorano o lo conoscono e quindi è facile trovare qualcuno a cui chiedere una mano o reperire informazioni (documentazione ufficiale a parte, un po’ carente).
- Persone: se ci sono nel proprio team molte persone già competenti su WordPress, può essere una scelta migliore sviluppare su questo rispetto a dover imparare un altro strumento.
Come fare quindi?
WordPress Structures •
La cosa interessante è che quindi WP è utilizzabile come CMS per siti generici andando a creare semplicemente un template ad-hoc, strutturato come “portale” invece che come “blog”. Qualche settaggio nel pannello di controllo e poi si è già pronti: non è necessario alcun hacking del codice, che comprometterebbe aggiornamenti futuri della piattaforma. Fosse necessario: create un plugin.
Gli elementi necessari per lavorare sono:
- Pagine, come contenuti strutturati in una gerarchia
- Posts, come gestione dei flussi ordinati per data
- Categorie, nell’accezione ristretta, escludendo quindi i tag
- Templates, intesi sia come theme su cui lavoreremo, sia come template di pagina singola.
Wordpress Mappings • •
Le strutture tecniche ci sono, bisogna iniziare a mapparle:
- L’architettura informativa (navigazione) progettata per il sito deve essere mappata sulle pagine, più o meno 1:1: vi sarà una home page, sotto questa si aggiungeranno altre pagine e si costruirà così tutta l’alberatura del sito.
- Le categorie si mappano sui template di pagina. Il template ci permette di definire il layout delle pagine del sito, decidendo quale contenuto va posizionato e dove. Costruendo template a blocchi si può definire che in una posizione viene estratta una specifica categoria, in un’altra una seconda e così via. Si realizza così una pagina singola che estrae contenuti da più parti diverse.
- Il template associato alle pagine è in grado di concludere la logica descritta sopra: associando dinamicamente categorie a template e template a pagine, si costruisce una struttura semplice in grado di estrarre i contenuti.
La logica è questa: una pagina ha un nome e uno “slug” (o “nicename”), quello usato per l’URL. La categoria verrà definita con lo stesso “slug” della pagina. In questo modo aprendo la pagina X si caricherà dinamicamente la categoria omonima X (se disponibile). E’ un metodo semplice ed intuitivo, anche perché le categorie come le pagine sono anch’esse una gerarchia.
- L’ultimo passaggio è nativo in WordPress: i post sono associati a una o più categorie. Pensando a questo punto alle categorie come degli slot di spazio entro cui fare apparire contenuti, visualizzati tramite i template nelle pagine desiderate, si può quindi scrivere un post e decidere in quali e quanti punti del sito farlo apparire.
Due esempi online di siti che ho realizzato con questa logica sono uno Key-One.it (l’azienda dove lavoravo tempo fa), mentre l’altro è un progetto che seguo da alcuni anni, Good50×70, un contest per tentare di dare una spinta a designer, grafici, fotografi e creativi per sensibilizzarli su tematiche sociali.
Il primo evidenzia bene la flessibilità di struttura che si può ottenere, mentre il secondo dimostra come si può realizzare un sito anche semplice tenendo tutti i vantaggi di modificabilità dettati dall’uso di WordPress.
WordPress Portal • • •
Per questo genere di progetti ho realizzato una libreria chiamata WordPress Portal, pubblicata sul sito Argilla, che è il mio contenitore per tutti quei progetti più legati all’aspetto di sviluppo e codice. Insomma, per sviluppatori.
La libreria è un insieme di funzionalità (riunite all’interno del namespace wpp) che ritengo utili e ho quindi raggruppato in questo strumento. Il nome prende spunto da questo utilizzo “generico” di WordPress come CMS, orientato quindi ai più generici “portali”. L’idea iniziale era di farne un plugin, ma per ora non è ancora successo perché ci sono troppi aspetti che necessitano di un programmatore e quindi non sono astraibili a livello utente.
Per ora comunque si può comunque aggiungere la libreria come un plugin in modo da rendere più semplice l’aggiornamento (se il template include una versione vecchia, basta aggiungee quella nuova come plugin) o per estendere un template che non ne fa uso.
Fra le varie funzionalità , la più interessante e comoda in assoluto è wpp::foreach_post(), che permette di creare altri The Loop oltre a quello principale, estraendo una singola categoria, una singola pagina o altre tipologie di contenuti (supporta la sintassi WHERE SQL, oltre ad alcune shortcut).
Il vantaggio è che internamente a questa chiamata si possono utilizzare tutte le funzionalità native di WordPress create apposta per The Loop. Mooooolto comodo.
Ci sono anche altre funzionalità , come ad esempio wpp::get_post_custom() che permette in modo semplice di estrarre i campi personalizzati associati ad un post.
Il progetto è ovviamente opensource, quindi sono benvenute critiche e suggerimenti (oltre che collaboratori).
WordPress Performance • • • •
Una delle più grosse critiche a WordPress sono le sue pessime performance. Seppure questo sia vero, ci sono molte cose che si possono fare per ottimizzare il suo funzionamento.
La prima, la più semplice in assoluto, utile per siti con più di 1000 pageview (stima mia), è utilizzare WP Cache o WP Super Cache. Questi sono due strumenti di caching che permettono di velocizzare notevolmente la visualizzazione della maggior parte delle pagine di un sito WordPress.
Ci sono alcuni test ma nessun benchmark esauriente (nel caso, fate qualche ricerca su Google). Un dato abbastanza recente è quello di Laughingsquid.com, che ha subito un picco di oltre 200.000 visite uniche e, grazie a WP Super Cache, non ha battuto ciglio, su una macchina che è un Dual Xeon 3.2 Ghz. Non poco, ma un investimento marginale nella maggior parte dei casi che possono richiedere di poter reggere oltre 200.000 visite.
Per l’ottimizzazione, vi rimando all’ottima presentazione di Fullo in merito.
Closing • • • • •
Insomma, WordPress è già un ottimo CMS generalista, che non soddisfa tutte le necessità ma è in grado di soddisfare molti requisiti differenti.
A mio avviso è importante non scartarla a priori come piattaforma solo perchè “è per i blog”: ha una struttura molto flessibile, efficace e comoda e con gli opportuni accorgimenti regge anche sensibili carichi di lavoro.
Non vi sto ovviamente consigliando WP in qualunque caso: in rapporto alle necessità , al team di lavoro, ai requisiti, ai vincoli tecnici e progettuali, alle persone che ci dovranno lavorare sia come utenti che come integratori, la scelta varia sensibilmente e quindi WP può - o non può - soddisfare le vostre esigenze. Fate sempre una scelta oculata. 
17 comments Add yours below
A me personalmente, anche se adesso lavoro più con la versione MU, è servita molto.
Assieme a quella di Fullo credo sia stata la più interessante.
;-)
iWordCamp 2008: un breve resoconto 2008 05 11 at 22:37
I ruoli li puoi vedere qui, sono: Admin, Editor, Author, Contributor, Subscriber. Ad ognuno sono associate una serie di "capabilities".
Ad esempio, si possono avere dei Contributor che scrivono e quini degli Editor che visionano i testi e procedono alla pubblicazione (edit_posts, publish_posts). Un workflow semplice, se non ci sono necessità più complesse.
Le pagine invece sono modificabili solo dagli Editor in su (edit_pages).
Non esiste un supporto esplicito al workflow come ho visto in certi sistemi, che gestiscono anche la notifica delle modifiche via mail e cose simili, ma posso supporre l'esistenza di un plugin, o la possibilità di realizzarlo.
Dopo questa non posso che aggiungere ai miei TODO una "partita" a WordPress per valutarne la possibilità di proporlo ai clienti come CMS. ;-)
Robe da Matt « Zanblog.it di Giorgio Zanetti 2008 05 12 at 12:59
Italian WordCamp 2008 05 12 at 23:07
| View | Upload your own
......
il wordcamp… 2008 05 13 at 01:09
nda
Skylog » Blog Archive » links for 2008-05-14 2008 05 14 at 08:31
» iWordCamp, in sintesi (ma neanche tanto) » Full(o)bloG 2008 05 16 at 09:24
1. Crei un template di pagina nella theme: questo contiene il layout della pagina e oltre al suo contenuto chiamerà (ad esempio con wpp::foreach_post() di Argilla WordPress Portal) in alcuni box.
2. La chiamata nei box serve per caricare solo una specifica categoria e tutte le sotto-categorie (mapping Categories -> Template).
3. Quindi, il template di pagina viene associato ad una pagina con tutti i suoi contenuti (mapping Template -> Pages).
4. La pagina è inserita nella sua gerarchia, che non è altro che la struttura di navigazione stessa del sito (mapping Architecture -> Pages).
Per esemplificare mi servirebbe fare schemi, ma mi viene un po' difficile ora come ora... :P
Blogmaster - Il WordCamp italiano a Milano 2008 05 17 at 11:31
PS: magari l'avrà già scoperto qualcun altro, ma impostando la base delle categorie a '/.' si riesce ad eliminare quella di default senza intervenire nel codice ;)
Andrea ‘Bau’ Pinti » Chi ha detto che è meglio Drupal? 2008 06 12 at 20:12