Ricerca…


Sintassi

  • add_action ('pre_get_posts', 'callback_function_name');
  • function callback_function_name ($ query) {}
  • // per PHP 5.3.0 o successivo
  • add_action ('pre_get_posts', function ($ query) {});

Parametri

Parametro Dettagli
$ query (WP_Query) Oggetto loop

Osservazioni

Se si utilizza PHP 5.3.0 o successivo, è possibile utilizzare chiusure ( funzioni anonime )

add_action( 'pre_get_posts', function( $query ) {
    if( !$query->is_main_query() || is_admin() ) return;

    // this code will run only if
    // - this query is main query
    // - and this is not admin screen
});

Targeting di loop ancora più specifico

Diciamo che vogliamo cambiare il ciclo principale , solo per tassonomia specifica o tipo di post.

Targeting solo del ciclo principale sulla pagina di archivio del tipo di book .

add_action( 'pre_get_posts', 'my_callback_function' );

function my_callback_function( $query ) {
    if( !$query->is_main_query() || is_admin() ) return;
    if( !is_post_type_archive( 'book' ) ) return;

    // this code will run only if
    // - this query is main query
    // - and this is not admin screen
    // - and we are on 'book' post type archive page
}

Puoi anche controllare la categoria, il tag o la pagina di archivio della tassonomia personalizzata usando is_category() , is_tag() e is_tax() .

Puoi utilizzare qualsiasi tag condizionale disponibile in WordPress.

Mostra i post di una sola categoria

add_action( 'pre_get_posts', 'single_category' );

function single_category( $query ) {
    if( !$query->is_main_query() || is_admin() ) return;

    $query->set( 'cat', '1' );
    return;
}

I messaggi pre-get filtrano l'utilizzo di base

A volte vorresti cambiare la query principale su WordPress.

Il filtro pre_get_posts è la strada da percorrere.

Ad esempio, usando pre_get_posts puoi dire al loop principale di mostrare solo 5 post. O per mostrare i post solo da una categoria, o escludendo qualsiasi categoria ecc.

add_action( 'pre_get_posts', 'my_callback_function' );

function my_callback_function( $query ) {
    // here goes logic of your filter
}

Come puoi vedere, stiamo passando l'oggetto query loop principale nel nostro argomento della funzione callback.

Nota importante qui: stiamo passando argomento come riferimento . Significa che non abbiamo bisogno di restituire query o impostare alcuna globalità per farlo funzionare. Poiché $query è un riferimento all'oggetto query principale, tutte le modifiche apportate al nostro oggetto si riflettono immediatamente nell'oggetto loop principale.

Escludi categoria dall'elenco di post modifica condividi

add_action( 'pre_get_posts', 'single_category_exclude' );

function single_category_exclude( $query ) {
    if( !$query->is_main_query() || is_admin() ) return;

    $query->set( 'cat', '-1' );
    return;
}

Cambia posts_per_page per il ciclo principale

Tutto ciò che dobbiamo fare è usare il metodo set() dell'oggetto $query .

Ci vogliono due argomenti, prima quello che vogliamo impostare e in secondo luogo quale valore impostare.

add_action( 'pre_get_posts', 'change_posts_per_page' );

function change_posts_per_page( $query ) {
    if( !$query->is_main_query() || is_admin() ) return;

    $query->set( 'posts_per_page', 5 );
    return;
}

Targeting del solo ciclo principale di WordPress

WordPress sta applicando il filtro pre_get_posts letteralmente a qualsiasi loop generato. Significa che tutti i cambiamenti che stiamo apportando nella nostra funzione di callback sono applicati a tutti i loop in uscita.

Ovviamente non è quello che vogliamo nella maggior parte degli scenari.

Nella maggior parte dei casi vorremmo scegliere come target solo il ciclo principale e solo per gli schermi non di amministrazione.

Possiamo usare is_main_query() metodo e is_admin() funzione globale per controllare se siamo nel posto giusto.

add_action( 'pre_get_posts', 'my_callback_function' );

function my_callback_function( $query ) {
    if( !$query->is_main_query() || is_admin() ) return;

    // this code will run only if
    // - this query is main query
    // - and this is not admin screen
}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow