ottimizzazione-codice-wordpress

Photo | JDBlundell

Hai trovato utile il primo consiglio su come scegliere i permalink in WordPress al meglio?

Well. L’articolo di oggi continua la serie su come ottimizzare al meglio il miglior CMS per blogging.

Ti sarà utile sapere, prima o poi, come inserire in maniera totalmente automatizzata un testo personalizzato all’inizio e/o alla fine (anche in mezzo se vuoi) di un post ma ancora più utile sarà sapere come inserirlo in alcuni specifici articoli.

Quelli di una sola categoria, o di un autore ad esempio.

Vediamo i suggerimenti…

1. La Funzione in_category

Sfogliando il Codex di WordPress ho trovato una Function Reference fatta apposta per questo caso: in_category.

Questa funzione verifica se il post corrente (o un qualsiasi post specificato) è assegnato ad una qualunque delle categirie specificate.

Nota però che vengono prese in considerazione solo le categorie alle quali il post è stato assegnato, spuntate nel pannello di scrittura/modifica; le categorie ‘madre’ non sono considerate, ma anche a questo c’è la soluzione (leggi dopo).

Ho utilizzato questo tag per inserire il messaggio personalizzato che vedi in cima a questo post (solo per la categoria WordPress):

Il codice da inserire all’interno del Loop del file che gestisce gli articoli (single.php o index.php ?) è:

<?php if ( in_category( '4' )) {
echo 'testo da inserire';
} else {
echo 'eventuale alternativa da inserire';
}
?>

Ovviamente sostituisci il 4 con l’ID della categoria d’interesse.

Nel punto in cui inserirai questo codice comparirà il tuo messaggio personalizzato. Tutto qua!

Verifica se un articolo è in una categoria ‘figlia’

Come ho scritto sopra la funzione in_category() verifica solo le categorie assegnate ai post, non quelle antenate, le categorie ‘madre’.

Vale a dire?

Vale a dire che se un post è assegnato alla sottocategoria Web Master → WordPress and non alla categoria Web Master, la funzione in_category('web master') chiamata per quel post restituirà come valore false.

Le soluzioni sono suggerite sempre nel Codex di WordPress.

La prima soluzione è quella di elencare tutte le categorie, sia quella ‘madre’ che quelle ‘discendenti’:

<?php if ( in_category( array( 'web master', 'wordpress', 'design', /*etc*/ ) ) {
echo 'testo da inserire';
}
?>

La seconda, più flessibile, è ovviamente quella di creare una nuova funzione ad hoc (nell’esempio è chiamata post_is_in_descendant_category)

Inserisci il seguente codice nel file functions.php per creare la funzione:

<?php function post_is_in_descendant_category( $cats, $_post = null )
{
foreach ( (array) $cats as $cat ) {
// get_term_children() accetta solo ID interi
$descendants = get_term_children( (int) $cat, 'category');
if ( $descendants &amp;amp;&amp;amp; in_category( $descendants, $_post ) )
return true;
}
return false;
}
?>

e questo codice dove vuoi inserire il tuo testo personalizzato:

<?php if ( in_category( 'fruit' ) ||
post_is_in_descendant_category( 11 ) ) {
// These are all fruits…
}
?>

Nota bene: non ho testato la seconda soluzione in WordPress 2.8. Se ci sono problemi fammi sapere.

2. Creare una nuova funzione ad hoc

Il secondo suggerimento viene direttamente da Daniele aka Ghido su BigThink.

Devi aggiungere un filtro sul the_content, agganciare la nuova funzione aggiungi_link, e indicare l’ordine di applicazione del filtro, facendo avere (con il numero 1) alla tua nuova funzione la prevalenza sulle altre.

Inserisci il seguente codice nel file functions.php del tuo tema

add_filter('the_content', 'aggiungi_link', 1);

e a seguire questo per inserire il testo personalizzato solo nei post di una determinata categoria (avendo cura di sostituire il “189″ con il tuo id)

function aggiungi_link($content = '') {
global $post;
$category = get_the_category();
$cat = $category[0]->term_id;
if($cat == 189){
$content .= 'Testo da inserire';
}
return $content;
}

o solo nei post di un determinato autore (ricorda sempre di sostituire il “2″ con l’id dell’autore d’interesse)

function aggiungi_link($content = '') {
global $post;
$id = get_the_author_id();
if($id == 2){
$content .= 'Testo da inserire';
}
return $content;
}

Leggi l’articolo di Ghido per avere un’idea ancora più chiara, è tutto ben spiegato su BigThink.

Magari Ghido stesso spiegherà se c’è differenza tra le due soluzioni, quale è la migliore tecnicamente e commenterà la sua scelta.

E tu, sei pronto a far inserire a WordPress il tuo testo personalizzato automaticamente?