Questo hook è chiamato dopo che la variabile oggetto è stata creata, ma prima che venga eseguita.

Con questo hook ogni modifica che viene fatta alla variabile query in realtà viene fatto anche all’oggetto originale. Non ha valori di ritorno. Vediamo subito il suo utilizzo

<?php add_action( 'pre_get_posts', 'nome_funzione' ); ?>

I suoi valori sono passati per riferimento.

Per esempio se volessimo escludere due categorie dall’home page dovremo fare

function exclude_category( $query ) {
 if ( $query->is_home() && $query->is_main_query() ) {
 $query->set( 'cat', '-1,-1347' );
 }
}
add_action( 'pre_get_posts', 'exclude_category' );

Oppure ponete in functions.php il seguente codice per visualizzare solo una categoriea in home page

function my_home_category( $query ) {
 if ( $query->is_home() && $query->is_main_query() ) {
 $query->set( 'cat', '123' );
 }
}
add_action( 'pre_get_posts', 'my_home_category' );

Esempio 3 limitare la ricerca

Con questo esempio possiamo limitare la ricerca all’interno del nostro blog ai soli articoli (posts)

function search_filter($query) {
 if ( !is_admin() && $query->is_main_query() ) {
 if ($query->is_search) {
 $query->set('post_type', 'post');
 }
 }
}

add_action('pre_get_posts','search_filter');