In un post precedente annotavo qualche considerazione sull’utilizzo di WordPress non come blog-engine, scopo per cui è stato creato, ma per applicazioni più complesse, come la gestione di un piccolo portale informativo. La home di un newsmagazine non è strutturata con il criterio dei blog-engine (l’ultimo articolo inserito è il primo visualizzato), ma, di solito, consente con un sistema di pesi di stabilire quali saranno le notizie in Home, e a quale livello di importanza ci finiranno.
In questo post provo a sintetizzare gli spunti operativi e di codice che servono per passare alle personalizzazioni ipotizzate.
HomePage
Come già riportato nel post precedente, per modificare la struttura della homepage di un sito basato su WordPress è necessario intervenire su TheLoop, la funzione che cicla tra i post inseriti e visualizza i più recenti. Immaginiamo di impaginare la nostra Home con una notizia di Primopiano, tre notizie di SecondoLivello, cinque articoli di cui visualizzeremo SoloTitolo. Creaimo allora tre categorie dal pannello admin di Wordpress, chiamiamole con i nomi appena ipotizzati, e appuntiamoci l’ID di queste categorie. Nell’esempio che descrivo assegnerò a queste tre categorie rispettivamente l’ID 11, 12 e 13.
A questo punto bisogna intervenire sul codice del file index.php presente sul nostro template. Per prima cosa, bisognerà rimuovere tutto il codice che va da:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
fino a:
<?php endwhile; else: ?> <p><?php _e('Sorry, no posts matched your criteria.'); ?></p> <?php endif; ?>
Per sostituirlo con:
<?php $posts = get_posts( "category=C&numberposts=N" ); ?> <?php if( $posts ) : ?> <?php foreach( $posts as $post ) : setup_postdata( $post ); ?> <h2><a href="<?php the_permalink() ?>" title="PermaLink to <?php the_title(); ?>"><?php the_title(); ?></a></h2> <?php the_content("Leggi tutto... '" . the_title('', '', false) . "'"); ?> <?php endforeach; ?> <?php endif; ?>
Dove con C indicheremo il numero della categoria, e con N il numero di post che vogliamo visualizzare per quella categoria.
Nel nostro esempio, dovremo inserire 3 volte questo codice, assegnando i valori 11, 1 – 12, 3 – 13, 5 a C e N, per rispettare i requisiti esposti nell’enunciazione dell’esempio. Nell’ultimo caso, elimineremo la riga <?php the_content("Leggi tutto... '" . the_title('', '', false) . "'"); ?> facendo visualizzare così solo i 5 titoli degli articoli pescati.
Impaginate e Stylesheet-ate a piacere, ed avrete la vostra Home personalizzata.
Sezioni
Wordpress consente, in maniera nativa, di gestire un’impaginazione diversa per ogni categoria presente. Immaginiamo di avere sul nostro portale una categoria chiamata “Pictures†in cui postiamo le nostre foto, e che questa categoria abbia ID=30. Il link generato in automatico da WordPress sarà del tipo nomesito/cartellablog/?cat=30.
Passare il parametro cat, fa fare al WordPress Engine un percorso del genere:
- andrà a vedere se esiste un file nel template chiamato category-30.php
- se non esiste, cercherà il file category.php
- se non esiste, caricherà index.php
Questa funzionalità consente di personalizzare il template per ogni categoria. Ad esempio, possiamo creare una testata tematica per la categoria Pictures e chiamare il file header-30.php; creiamo un category-30.php copincollando e rinominando il category.php standard e modifichiamo le prime righe del file, sostituendo:
<?php get_header(); ?>
con:
<?php include(TEMPLATEPATH . '/header-30.php') ; ?>
Questo discorso si può estendere con lo stesso criterio a sidebar e footer.
Ogni volta che si accederà a nomesito/cartellablog/?cat=30, WordPress visualizzerà il tutto prendendo il codice da category-30.php, in automatico, senza bisogno di altri interventi.
Utilizzi possibili
L’interesse per una manipolazione avanzata del Wordpress engine era nato per un lavoro di pubblicazione di una testata giornalistica online, lavoro che in realtà ha richiesto modifiche più profonde, sviluppate con lo stesso criterio (le pagine di visualizzazione dell’articolo singolo richiamano i 5 articoli più recenti presenti in quella determinata categoria, il sistema di banner è gestito con il sistema di gestione dei post nativo di WordPress, eccetera).
Il codice appena postato permette però di creare funzioni utili per qualsiasi tipo di blog. Ad esempio, è semplice creare una sorta di widget che visualizzi i titoli dei 5 post “migliori†(a proprio parere, naturalmente) nella propria sidebar. Si crea una categoria (â€mybest“) e si annota l’ID (ipotizziamo che sia il 35).
A quel punto, si edita la sidebar, inserendo il codice:
<?php $posts = get_posts( "category=35&numberposts=5" ); ?> <?php if( $posts ) : ?> <?php foreach( $posts as $post ) : setup_postdata( $post ); ?> <h2><a href="<?php the_permalink() ?>" title="PermaLink to <?php the_title(); ?>"><?php the_title(); ?></a></h2> <?php endforeach; ?> <?php endif; ?>
lo si impagina a dovere tramite CSS, e il gioco è fatto.
Ancora, è possibile impostare una categoria nel proprio blog i cui post non vengano visualizzati in home page. Pensiamo ad un blogger che scrive sia di tematiche tecniche o comunque correlate al proprio lavoro, che di avvenimenti econsiderazioni private. Se ha intenzione di utilizzare il blog come una sorta di curriculum vitae, avrà bisogno di far sì che alcuni post non siano in home. Basta creare una categoria Private, escluderla dal loop in home page (ad esempio, non assegnando ai post in essa contenuti l’ulteriore categoria Public, utilizzata per ciclare i post che andranno in home page) e creare un RSS Feed distinto per questa Eccetera.
Spero di essere stato sufficientemente dettagliato. La fonte di ispirazione iniziale è stato sicuramente http://max.limpag.com, che ancora ringrazio. Buon lavoro a chiunque si cimenterà .