Usiamo i filtri nei child theme per WordPress

Wordle: filtri di wordpress

In questo articolo vedremo come usare con profitto i Filtri nel nostro child theme per WordPress. Con i filtri avremo un controllo pressoche totale sull’ HTML usato nel nostro tema per WordPress, senza toccare nessun file dei template.

Come funzionano i Filtri di WordPress

Filtrare una funzione e’ abbastanza facile quando sappiamo come lavorano i filtri.

Per prima cosa ricordiamo un particolare importantissimo: il file functions.php deve iniziare e finire con i tag di apertura e chiusura di PHP, senza linee extra ne’ prima ne’ dopo. Ecco un esempio:

1
2
3
<?php
// contenuto
?>

Anatomia di un filtro di WordPress

Vediamo una funzione di esempio:

1
2
3
4
5
// Funzione standard per modificare qualcosa
function my_function_name() {
  // il nostro codice va qui, fra parentesi graffe
}
add_filter('filter_name','my_function_name');

Abbiamo scritto una funzione usando codice PHP:

2
3
4
function my_function_name() {
    // il nostro codice va qui, fra parentesi graffe
}

e poi abbiamo indicato a WordPress di usare questa funzione (my_function_name) invece che quella originale (filter_name).

5
add_filter('filter_name','my_function_name');

filter_name e’ la cosa cruciale. Da qualche parte nei meandri del codice di WordPress o del nostro tema genitore (Thematic Framework per WordPress nel nostro caso) c’è una funzione che appare piu’ o meno cosi’:

1
2
3
4
function super_stuff() {
    $stuff = 'bacon';
    echo apply_filters ( 'filter_name' , $stuff );
}

Notiamo l’ultima linea della funzione super_stuff: echo essenzialmente significa “mostralo sullo schermo” ma la cosa principale e’ apply_filters. Da qui viene filter_name, il filtro che stiamo “filtrando”. Ogni funzione che usa apply_filters, sia in WordPress o nel nostro tema genitore, potra’ essere filtrata da un’ altra funzione in un plugin o, cosa ancor piu’ importante, in un child theme.

Questo passaggio e’ importantissimo.

Iniziamo a filtrare alcune funzioni del nostro tema.

Filtrare le funzioni di un tema

Attiviamo un child theme e assicuriamoci che esista il file functions.php (altrimenti creiamolo).

Andremo a filtrare una delle funzioni apparentemente piu’ complicate di Thematic: thematic_postheader.

In realta’, non e’ complicato per nulla. Vediamo una versione ridotta di thematic_postheader che contiene praticamente tutto quello che abbiamo bisogno di sapere.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Informazioni nel Post Header
// il titolo e le informazioni che vediamo sotto il titolo di un articolo
function thematic_postheader() {
    global $id, $post, $authordata;

    // Il titolo	    
    $posttitle = apply_filters('thematic_postheader_posttitle',$posttitle);

    // Le informazioni
    $postmeta = apply_filters('thematic_postheader_postmeta',$postmeta);

    // e' una rticolo o una pagina?
    if ($post->post_type == 'page' || is_404()) {
        // se e' una pagina, mostra solo il titolo
        $postheader = $posttitle;
    } else {
        // se e' un articolo, mostra Il titolo e le informazioni
        $postheader = $posttitle . $postmeta;
    }

    // Mostra il Post Header sul monitor
    echo apply_filters( 'thematic_postheader', $postheader ); // Filtro per sovrascrivere la funzione originale
}

Abbiamo 3 apply_filters, 1 per thematic_postheader e 2 per il contenuto all’ interno di esso, Post Title e Post Meta.

Facciamo qualcosa di stupido: rimpiazziamo il contenuto del nostro Post header con del …bacon!

Copiamo questo codice in functions.php, salviamo e ricarichiamo il nostro sito di prova:

1
2
3
4
function childtheme_postheader() {
	echo 'bacon';
}
add_filter('thematic_postheader','childtheme_postheader');

Il titolo e le informazioni correlate sono scomparese ed e’ rimasto solo … bacon. Non molto utile ma espicativo si!

Proviamo con un’ altra, stavolta piu’ utile, funzione. Cancelliamo il codice precedente da functions.php.

Potremmo aver bisogno di aggiungere un div che contenga il titolo a tutti i nostri post, per qualunque motivo. Dovremo filtrare la variabile in thematic_postheader che genera il titolo dell’ articolo e cambiare il codice originale nel tema genitore – senza, in realta’, neanche toccarlo.

Copiamo questo codice in functions.php, salviamo e ricarichiamo il sito di prova:

1
2
3
4
function childtheme_posttitle($posttitle) {
	return '<div class="contenitore_del_titolo">' . $posttitle . '</div>';
}
add_filter('thematic_postheader_posttitle','childtheme_posttitle');

Controlliamo il codice generato: abbiamo aggiunto il div contenitore a tutti i titoli del nostro sito con sole 4 righe di codice.

Vediamo cosa abbiamo fatto di diverso con questa funzione. Abbiamo aggiunto una variabile nella linea 1 e l’abbiamo inviata alla linea 2 utilizzando il contenuto della funzione che stavamo filtrando (il titolo dell’ articolo).

Semplice no?

Dove trovare i filtri

Oltre a scavare nel codice, ci sono due ottime risorse per trovare tutti i filtri che possiamo “filtrare”:


Articolo scritto da Ian Stewart con il titolo Using Filter Hooks in WordPress Child Themes.

Termini collegati: , , I commenti ed i trackbacks sono attualmente chiusi.

Un Commento

  1. anto
    Pubblicato 18 dicembre 2010 alle 13:02 | Link Permanente

    Ciao, anche qui ti sarei grato di indicarmi un link funzionante per “lista dei filtri di Thematic” .
    Grazie