WordPress
Afwisselende hoofdlus (pre_get_posts filter)
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
}