Anzeigen von Posts von nur einem Postformular in der benutzerdefinierten Abfrage und Ausschließen in der Hauptabfrage

Ich versuche, zuerst vier Posts mit Post-Format-Aside (alle dem aktuellen Tag zugewiesen) anzuzeigen und dann das “echte” Archiv (ausgenommen Post-Format-Aside) für das spezifische Tag anzuzeigen. Im Moment benutze ich eine function, um Post-Format-abgesehen von der Haupt-Abfrage auszuschließen:

add_action('pre_get_posts', 'keyl_get_emp_posts'); function keyl_get_emp_posts($query) { if (is_tag()) { if ($query->is_main_query()) $taxq = array( 'tag' => $current_tag, array( 'taxonomy' => 'post_format', 'field' => 'slug', 'terms' => array( 'post-format-aside' ), 'operator' => 'NOT IN' ) ); $query->set('tax_query',$taxq); } } 

Als ich versuche, die benutzerdefinierte Abfrage mit nur Post-Format-beiseite mit anzuzeigen

 
4, 'tag' => $current_tag, 'post_type' => array('post', 'renvoeringsdamm'), 'tax_query' => array( array( 'taxonomy' => 'post_format', 'field' => 'slug', 'terms' => array( 'post-format-aside' ) ) ) ); $query = new WP_Query( $args ); if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); ?>

Aber die spezielle Abfrage nur für Post-Format-Seiten ist die Anzeige von Post aus allen Arten von Post-Formaten … Also meine Frage ist wirklich, was ist falsch mit dem, was ich bisher getan habe! ..

Solutions Collecting From Web of "Anzeigen von Posts von nur einem Postformular in der benutzerdefinierten Abfrage und Ausschließen in der Hauptabfrage"

Ich vermute nicht, dass Ihre tax_query Sie scheitert, aber eigentlich ist Ihr tag Parameter. single_tag_title() gibt den Namen des Tags zurück, nicht den Slug.

Alle Tag- und Kategorieabfragen werden in der class tax_query in eine tax_query konvertiert, bevor sie an die class WP_Tax_Query , um die relative Zeichenfolge für die SQL-Abfrage zu erstellen. Termnamen und Slugs werden vor der validation und vor dem Erhalt der Term-ID der übergebenen Terme bereinigt. ( Nur um des Interesses willen, lesen Sie, warum Sie in einer tax_query keine tax_query und den name tax_query , überprüfen Sie meine Antwort hier )

Nun sollten Schnecken immer Kleinbuchstaben und mehrere Wörter durch Bindestriche getrennt sein. Du gibst einen Namen als eine Schnecke. Da der Begriff name im Begriff slug column nicht tax_query ( weil Sie tax_query , in der slug-Spalte WP_Tax_Query ), akzeptiert WP_Tax_Query dass der Begriff ungültig ist und nicht existiert und daher einfach eine leere Zeichenfolge WP_Tax_Query und WP_Tax_Query . Hier kommt der große Fehler ( was meiner Meinung nach ein Fehler ist, der behoben werden sollte ). WP_Tax_Query sendet eine leere SQL-Verbindungszeichenfolge zurück an WP_Query . WP_Query liest dies fälschlicherweise so, als ob es nie eine tax_query und erstellt weiter und führt dann das SQL ohne die Join-Klausel aus. Diese gibt dann unerwartet alle Beiträge unabhängig zurück, wo es meiner Meinung nach überhaupt keine Beiträge zurückgeben sollte. Das siehst du

Sehen wir uns also eine Lösung an und bereinigen Sie Ihren Code und machen Sie ihn zuverlässiger

Zuerst die Aktion pre_get_post

  • Fügen Sie eine Prüfung hinzu, um nur auf das Frontend zu zielen, andernfalls werden Back-End-Abfragen ebenfalls beeinflusst

  • Setzen Sie is_tag() auf die aktuelle Instanz

  • tax_query Sie die aktuelle tax_query auf der Tag-Seite ab und ändern Sie sie, um den Post-Format-Abschnitt hinzuzufügen und diesen als neue tax_query

Sie können Ihren Code so einstellen: ( Ich verwende Schließungen, aber Sie können auf den alten Stil wie in Ihrer Frage zurückgreifen 😉 )

 add_action('pre_get_posts', function ($q) { if ( !is_admin() // Only targets front end queries && $q->is_main_query() // Only targets the main query && $q->is_tag() // Only targets tag archive pages ) { // Gets the current tax_query $tax_query_obj = $q->tax_query->queries; // Add the post format query part to the current tax_query $tax_query_obj[] = [ 'taxonomy' => 'post_format', 'field' => 'slug', 'terms' => ['post-format-aside'], 'operator' => 'NOT IN' ]; //Build a proper tax query $tax_query = [ 'relation' => 'AND', $tax_query_obj ]; // Set the modified tax_query $q->set( 'tax_query', $tax_query ); // Set any additional parameters here except tag parameters } }, PHP_INT_MAX ); 

Wie bei Ihrer benutzerdefinierten Abfrage können wir die aktuelle Tag-ID get_queried_object_id() indem Sie einfach get_queried_object_id() und diese dann in einer tax_query mit unserem Post-Format verwenden. Sie können Folgendes in Ihren Argumenten versuchen: ( Erfordert PHP 5.4+ aufgrund der neuen kurzen Array-Syntax ( [] ) )

 $args = [ 'tax_query' => [ [ 'taxonomy' => 'post_tag', // Default tag taxonomy 'terms' => get_queried_object_id(), // Gets current tag archive tag ID ], [ 'taxonomy' => 'post_format', 'field' => 'slug', 'terms' => 'post-format-aside' ], ], // Rest of your arguments excluding tag parameter ];