Sök…


Syntax

  • add_action ('pre_get_posts', 'callback_function_name');
  • funktion callback_function_name ($ query) {}
  • // för PHP 5.3.0 eller högre
  • add_action ('pre_get_posts', funktion ($ fråga) {});

parametrar

Parameter detaljer
$ fråga (WP_Query) Loop-objekt

Anmärkningar

Om du använder PHP 5.3.0 eller högre kan du använda stängningar ( anonyma funktioner )

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
});

Ännu mer specifik slinginriktning

Låt oss säga att vi vill ändra huvudslingan , endast för specifik taxonomi eller posttyp.

Inriktning endast huvudslingan på book post typ arkivsida.

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
}

Du kan också kontrollera för arkivsida för kategori, tagg eller anpassad taxonomi med is_category() , is_tag() och is_tax() .

Du kan använda alla villkorade taggar som finns tillgängliga i WordPress.

Visa inlägg från endast en kategori

add_action( 'pre_get_posts', 'single_category' );

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

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

Pre få inlägg filtrera grundläggande användning

Ibland vill du ändra WordPress-frågan.

Filtrera pre_get_posts är vägen att gå.

Till exempel med pre_get_posts du berätta huvudslingan att endast visa fem inlägg. Eller för att visa inlägg bara från en kategori, eller exkludera någon kategori etc.

add_action( 'pre_get_posts', 'my_callback_function' );

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

Som ni ser, vi passerar huvudslingan fråga föremål i vår callback-funktion argument.

Viktig anmärkning här: vi överför argument som referens . Det betyder att vi inte behöver returnera frågan eller ställa några globaler för att få den att fungera. Eftersom $query är en referens till huvudfrågeobjektet återspeglas alla ändringar vi gör på vårt objekt omedelbart i huvudslingobjektet.

Uteslut kategori från inläggslistan redigera delning

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;
}

Ändra posts_per_page för huvudslingan

Allt vi behöver göra är att använda metoden set() för $query objekt.

Det kräver två argument, först vad vi vill ställa in och för det andra vilket värde som ska ställas in.

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;
}

Inriktning endast WordPress-slingan

WordPress använder pre_get_posts filter på bokstavligen alla slingor som det genererar. Det betyder att alla ändringar vi gör i vår återuppringningsfunktion tillämpas på alla utgående slingor.

Uppenbarligen är det inte vad vi vill ha i de flesta scenarier.

I de flesta fall vill vi inrikta oss bara på huvudslingan och endast för skärmar som inte är administratörer.

Vi kan använda is_main_query() -metoden och is_admin() global funktion för att kontrollera om vi är på rätt plats.

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow