WordPress
Växlande huvudslinga (pre_get_posts-filter)
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
}