Assieme agli action hook i filter hook sono fondamentali per la creazione di plugin in quanto permettono di manipolare il risultato di particolari funzioni predisposte da un’altra posizione. Il loro effetto sul cms è reversibile, eliminando il codice del filtro il cms tornerà come prima.

Una volta che per una funzione è stato registrato un fiter hook è possibile creare un filtro che riceve come parametro l’output della funzione, effettua alcune modifiche in php e restituisce il valore modificato.

Registrare un filter hook per una funzione

Per molte funzioni di wordpress sono già stati registrati dei filer hook. Un elenco parziale è visibile in questa pagina

Per capire come è possibile creare un filter hook diamo un’occhiata alla funzione the_content(), definita nel core di wordpress (vedi file wp-includes/post-template.php) a cui è stato assegnato un filter hook.

function the_content( $more_link_text = null, $strip_teaser = false) {
	$content = get_the_content( $more_link_text, $strip_teaser );

	/**
	 * Filter the post content.
	 *
	 * @since 0.71
	 *
	 * @param string $content Content of the current post.
	 */
	$content = apply_filters( 'the_content', $content );
	$content = str_replace( ']]>', ']]>', $content );
	echo $content;
}

Questa funzione, utilizzata all’interno di un loop consente di visualizzare il contenuto del post corrente contenuto nella variabile $content.

echo $content;

Il filtro viene creato nella terzultima riga dove questa variabile è passata come secondo parametro alla funzione apply_filters(). Il primo parametro invece è il nome dell’hook che stiamo definendo.

 

Creare il filtro

A questo punto per manipolare il contenuto di $content dobbiamo creare un filtro nel file functions.php

Inseriamo il seguente snippet e proviamo a visualizzare un post a caso.

function crea_filtro_contenuto( $contenuto )
{
	var_dump( $contenuto );
	die();
}
add_filter( 'the_content', 'crea_filtro_contenuto' );

Possiamo notare che nella variabile è una stringa che contiene l’html generato per il post.
Sfruttiamo questa situazione per aggiungere un paragrafo aggiuntivo a tutti i post type ‘recensione’.

function crea_filtro_contenuto( $contenuto )
{
	if ( get_post_type() == 'recensione' )
		$contenuto .= '<p>Testo da accodare ai tipi di post 'recensione' </p>';
	return $contenuto;
}
add_filter( 'the_content', 'crea_filtro_contenuto' );

 


  inStileWeb.com