Suche…


Syntax

  • add_action ('pre_get_posts', 'callback_function_name');
  • Funktion callback_function_name ($ query) {}
  • // für PHP 5.3.0 oder höher
  • add_action ('pre_get_posts', Funktion ($ query) {});

Parameter

Parameter Einzelheiten
$ Abfrage (WP_Query) Schleifenobjekt

Bemerkungen

Wenn Sie PHP 5.3.0 oder höher verwenden, können Sie Closures ( anonyme Funktionen ) verwenden.

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

Noch spezifischeres Loop-Targeting

Angenommen, wir möchten die Hauptschleife nur für eine bestimmte Taxonomie oder einen Post-Typ ändern.

Targeting nur Hauptschleife auf book Post Art Archivseite.

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
}

Sie können mit is_category() , is_tag() und is_tax() auch nach Kategorien, Tags oder benutzerdefinierten Taxonomie-Archivseiten is_tax() .

Sie können jedes in WordPress verfügbare bedingte Tag verwenden .

Zeige Beiträge aus nur einer Kategorie

add_action( 'pre_get_posts', 'single_category' );

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

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

Beiträge vor dem Abrufen von Posts filtern die grundlegende Verwendung

Manchmal möchten Sie die Haupt-WordPress-Abfrage ändern.

Filter pre_get_posts ist der Weg zu gehen.

Zum Beispiel pre_get_posts Sie mit pre_get_posts Hauptschleife mitteilen, dass sie nur 5 Beiträge pre_get_posts . Oder um Beiträge nur aus einer Kategorie anzuzeigen oder jegliche Kategorie auszuschließen usw.

add_action( 'pre_get_posts', 'my_callback_function' );

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

Wie Sie sehen, übergeben wir das Hauptschleifen- Abfrageobjekt in unser Callback-Funktionsargument.

Wichtiger Hinweis hier: Wir übergeben Argumente als Referenz . Das bedeutet, dass wir keine Abfrage zurückgeben oder Globals setzen müssen, damit es funktioniert. Da $query eine Referenz auf das Hauptabfrageobjekt ist, werden alle Änderungen, die wir an unserem Objekt vornehmen, sofort im Hauptschleifenobjekt angezeigt.

Kategorie aus der Beitragsliste entfernen freigeben

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

Ändern Sie posts_per_page für die Hauptschleife

Alles was wir tun müssen, ist die set() Methode des $query Objekts zu verwenden.

Es braucht zwei Argumente, erstens was wir setzen wollen und zweitens welchen Wert Sie setzen wollen.

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 nur für die Haupt-WordPress-Schleife

WordPress wendet den pre_get_posts Filter buchstäblich auf jede erzeugte Schleife an. Das bedeutet, dass alle Änderungen, die wir an unserer Callback-Funktion vornehmen, auf alle vorhandenen Loops angewendet werden.

Natürlich wollen wir es in den meisten Szenarien nicht.

In den meisten Fällen möchten wir nur die Hauptschleife anvisieren und nur für Nicht-Administrationsbildschirme.

Wir können die is_main_query() -Methode und die globale Funktion is_admin() verwenden, um zu überprüfen, ob wir am richtigen Ort sind.

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow