it-swarm.com.de

$ wp_query Initiation?

Ich frage mich, wann WordPress seine Hauptabfrage einleitet, die den globalen $wp_query festlegt und es uns ermöglicht, die Funktionen has_posts() und the_post() zu verwenden. Wenn ich eine Seite mit einer Archivvorlage erstelle, woher weiß sie, wie ihre Abfrage festgelegt wird?

Ich schaue mir die Datei archive.php in einem der WordPress-Standardthemen an. Sie haben eine Archivseite, die jedoch nur get_header() und has_posts() aufruft. Dies bedeutet, dass die Abfrage bereits festgelegt ist. Also leitet WordPress die URL weiter, um den benutzerdefinierten Post-Typ-Parameter in der URL zu verwenden?

Wo ändere ich die Hauptabfrage, wenn ich benutzerdefinierte Archivseiten erstelle? In der neuen Archivvorlagendatei?

4
TurtleTread

Der Benutzer Rarst hat eine sehr bekannte Antwort wo er den Ladevorgang auslegt. Wenn dieses Diagramm angezeigt wird, ruft es beim Laden von wp-blog-header.php die Funktion wp() auf, mit der viele WordPress-Globals wie $post und $wp_query eingerichtet werden. ( Sekundärreferenz nach Benutzer Gmazzap )

Das ist die technische Seite der Dinge, aber es sieht so aus, als ob der Kern Ihrer Fragen darin besteht, Ihre eigenen benutzerdefinierten Archivseiten zu erstellen. WordPress verfügt über eine Vorlagenhierarchie , mit der Sie benutzerdefinierte Archive für Dinge wie benutzerdefinierte Beitragstypen erstellen können.

Eine andere übliche Möglichkeit, die Hauptabfrage zu ändern, ist die Verwendung von Hook in der Datei functions.php mit dem Namen pre_get_posts . Auf diese Weise können Sie das Abfrageobjekt ändern, bevor WordPress einen Ping-Befehl an die Datenbank sendet, um die Informationen abzurufen, mit denen The Loop auf einfache Weise mit anderen Einstellungen geändert werden kann. Ein Beispiel könnte so aussehen, dass The Loop so geändert wird, dass 20 Posts anstatt der Standard-10 angezeigt werden:

function wpse_265733( $query ) {

    // Don't run on admin
    if( $query->is_admin ) {
        return;
    }

    // Run only on the blog page
    if( is_home() ) {
        $query->set( 'posts_per_page', 20 );    // Set posts per page to 20.
    }

}
add_action( 'pre_get_posts', 'wpse_265733' );
2
Howdy_McGee

Nachdem Plugins und Designfunktionen geladen wurden, analysiert WordPress die eingehende Anfrage in Abfragevariablen, indem es die Liste der Umschreiberegeln durchsucht, um ein Muster zu finden, das der Anfrage entspricht.

Es gibt eine Reihe von Standardregeln für die eingebauten Typenseiten, verschiedene Archive, Einzelansichten, Paginierungen und Feeds. Sie können Ihre eigenen Regeln oder Endpunkte manuell hinzufügen oder neue Inhaltstypen registrieren, die alle diese Regeln für Ihren benutzerdefinierten Inhalt automatisch generieren.

Nachdem die Anforderung in Abfragevariablen konvertiert wurde, wird die Abfrage ausgeführt. In vielen Fällen bestimmen die Ergebnisse der Abfrage, welche Vorlage geladen wird.

Dann wird natürlich die Vorlage geladen und alles ist gut.

Daher stehen eine Reihe von Aktionen und Filtern zur Verfügung, mit denen Sie bei jedem Schritt Änderungen vornehmen können. In der Aktionsreferenz finden Sie eine detailliertere Darstellung des Prozesses und einiger dieser Dinge.

Die einfachste und gebräuchlichste Methode ist die pre_get_posts action . Dadurch werden die Abfragevariablen verfügbar und Sie können Änderungen vornehmen, bevor die Abfrage ausgeführt wird. Eine Referenz der Abfragevariablen finden Sie unter WP_Query .

Wenn dies Ihren Anforderungen nicht entspricht, schauen Sie sich den request filter an, der eine radikalere Manipulation von Abfragen ermöglicht, da er direkt nach der Abfrage-Var-Extraktion ausgeführt wird, bevor WordPress Entscheidungen über die Art der Anforderung trifft, die stattfindet .

3
Milo