Zoeken…


Syntaxis

  • add cialis ('pre_get_posts', 'callback_function_name');
  • functie callback_function_name ($ query) {}
  • // voor PHP 5.3.0 of hoger
  • add cialis ('pre_get_posts', functie ($ query) {});

parameters

Parameter Details
$ vraag (WP_Query) Lusobject

Opmerkingen

Als u PHP 5.3.0 of hoger gebruikt, kunt u sluitingen gebruiken ( anonieme functies )

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

Nog meer specifieke lus targeting

Laten we zeggen dat we de hoofdlus willen wijzigen, alleen voor specifieke taxonomie of posttype.

Targeting alleen de belangrijkste lus op book na het type archiefpagina.

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
}

U kunt ook controleren op categorie, tag of aangepaste taxonomie-archiefpagina met behulp van is_category() , is_tag() en is_tax() .

U kunt elke voorwaardelijke tag gebruiken die beschikbaar is in WordPress.

Toon berichten uit slechts één categorie

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-posts filteren basisgebruik

Soms wilt u de belangrijkste WordPress-zoekopdracht wijzigen.

Filter pre_get_posts is de beste keuze.

Bijvoorbeeld met behulp van pre_get_posts kan je vertellen hoofdlus tot slechts 5 berichten te tonen. Of om berichten uit slechts één categorie te tonen, of een categorie uit te sluiten, enz.

add_action( 'pre_get_posts', 'my_callback_function' );

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

Zoals u kunt zien, geven we het hoofdlusqueryobject door aan ons callback-functieargument.

Belangrijke opmerking hier: we geven argumenten door als referentie . Het betekent dat we geen query hoeven te retourneren of globalen hoeven in te stellen om het te laten werken. Omdat $query een verwijzing is naar het hoofdqueryobject, worden alle wijzigingen die we in ons object aanbrengen, onmiddellijk weerspiegeld in het hoofdlusobject.

Categorie uitsluiten van bewerkingsaandeel berichtenlijst

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

Wijzig posts_per_page voor hoofdlus

Het enige wat we moeten doen is de methode set() van het $query object gebruiken.

Er zijn twee argumenten nodig, ten eerste wat we willen instellen en ten tweede welke waarde we moeten instellen.

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

Alleen gericht op de belangrijkste WordPress-lus

WordPress past pre_get_posts filter toe op letterlijk elke lus die het genereert. Het betekent dat alle wijzigingen die we aanbrengen in onze callback-functie worden toegepast op alle uitgaande lussen.

Het is duidelijk dat dit niet is wat we in de meeste scenario's willen.

In de meeste gevallen willen we ons alleen richten op de hoofdlus en alleen voor niet-beheerdersschermen.

We kunnen de methode is_main_query() en is_admin() om te controleren of we op de juiste plaats zijn.

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow