web-dev-qa-db-de.com

Abfragen in tag.php ausführen

Ich bin wahrscheinlich dicht, aber ich kann nicht herausfinden, worum es hier geht.

Die Site, die ich entwickle, verwendet eine benutzerdefinierte Schleife mit einer Abfrage, die alle als archiviert markierten Posts ausschließt.

Der Grund, warum ich die Vorlage tag.php bearbeiten möchte, besteht darin, benutzerdefinierte Metas im Front-End auszugeben und das Erscheinungsbild aller Posts auf den Archivseiten zu optimieren.

Es funktioniert perfekt für den Großteil der Site, aber auf tag.php führt es dazu, dass die Tag-Cloud bricht und jedes angeklickte Tag die vollständige Beitragsliste aufruft.

Wenn ich die Abfrage entferne, funktioniert die Tag-Cloud einwandfrei, archivierte Posts werden jedoch weiterhin angezeigt und sind nicht so angeordnet, wie sie sein müssen.

Der von mir verwendete Abfragecode lautet:

// The Queries
   $args = array(
      'post_type' => array('post', 'report', 'analysis', 'guest-blog'),
      'order'     => 'DESC',
      'meta_query'     => array(
            array(
               'key'     => 'epi_pubarchive',
               'value'   => 1,
               'compare' => '!=',
           )
      )
   );

 $the_query = new WP_Query( $args );

Der Metaschlüssel epi_pubarchive ist ein mit Meta Box erstelltes Kontrollkästchen, das im Wesentlichen überprüft, ob das Kontrollkästchen aktiviert ist oder nicht.

Ich habe versucht, die meta_query zu entfernen und es mit den grundlegenden post_type- und order-Argumenten zu versuchen, aber das wird auch nicht funktionieren.

Weiß jemand, wo das Problem mit der Tag-Vorlage und den Abfragen liegt?

Gibt es einen besseren Weg, um das gewünschte Ergebnis zu erzielen?

4
Jon Watson

Dies liegt daran, dass die Hauptabfrage verworfen und durch Ihre benutzerdefinierte Abfrage ersetzt wird. Sie haben Ihrer benutzerdefinierten Abfrage nicht befohlen, nach diesem Tag zu suchen. Warum sollte dies dann geschehen? Möglicherweise stellen Sie auch fest, dass Ihre Paginierung aus demselben Grund unterbrochen ist. Sie haben der neuen Abfrage nicht mitgeteilt, auf welcher Seite Sie sich befinden. Warum wird dann die richtige Seite ausgewählt?

Außerdem ist diese Hauptabfrage teuer! Warum wirfst du es weg! Warum nicht ändern?

Stellen Sie sich vor, Sie schicken Ihrem Freund jeden Morgen einen Latte und jeden Tag nach einer 20-minütigen Fahrt warfen Sie den Kaffee in den Mülleimer und sagten: "Ich bin laktoseintolerant, geben Sie mir stattdessen eine heiße Schokolade." Dann machen sie eine weitere 20-minütige Fahrt, um die heiße Schokolade zu holen. Ihr Freund ist verärgert, und Sie warten 40 statt 20 Minuten. Wäre es nicht einfacher, wenn Sie ihm vor der Abreise auf die Schulter klopfen und sagen: "Hey, ich habe es mir anders überlegt, ich will eine heiße schokolade "?

Verwenden Sie den pre_get_posts-Filter, um die Optionen in der Hauptabfrage zu ändern, bevor dies geschieht, z. So können Sie die Anzahl der Posts pro Seite ändern:

add_filter( 'pre_get_posts', function( \WP_Query $query ) {
    if ( $query->is_tag() && $query->is_main_query() ) {
        $query->set( 'posts_per_page', 5 );
    }
} );

Sie können $query->set verwenden, um auch andere Optionen zu ändern, und Sie sollten dies tun, um Ihre Beitragstypen und den Taxonomieausschluss festzulegen.

Ein letzter Hinweis zur Datenspeicherung und Leistung

Sie sollten nie alles außer XYZ suchen. Sie möchten sagen, wonach Sie suchen, nicht wonach Sie suchen. Es ist langsamer und skaliert nicht. Manchmal ist es tatsächlich schneller, alles zu bekommen, als es manuell in PHP zu entfernen!

Anstatt also Beiträge zu einem archivierten Begriff hinzuzufügen, sollten Sie einen ungelesenen/nicht archivierten Begriff verwenden und stattdessen nach diesen suchen?

4
Tom J Nowell