WP_Query und eine Variable für ‘cat’ => im Array args = WP Bug?

Für diese Diskussion folgt hier eine Version meiner Abfrage in category.php:

wp_reset_query(); $category_id = get_cat_ID(single_cat_title('', false)); $my_query = new WP_Query(array( 'posts_per_page' => SOME_DEFINED_VALUE, 'cat' => $category_id, 'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 ), 'post_type' => array('post','post_custom_1','post_custom_2','post_custom_3') )); // print_r($my_query); 

Kurz gesagt, es funktioniert nicht. Hier ist, was ich bemerkt habe.

Wenn ich die print_r ($ my_query); Ich kann die query_vars in der ersten Zeile sehen. Sie stimmen nicht mit meinen Array-Argumenten überein. Zum Beispiel verwendet die posts_per_page standardmäßig einen anderen Wert (nicht die CONSTANT), und die post_type-Liste enthält nicht mehr post (was sollte / muss).

Wenn ich die Zeile mit ‘cat’ => lösche oder den Wert festlege (‘cat’ => 3), dann funktioniert alles wie erwartet. Die verbleibenden query_vars werden in print_r angezeigt. Das leben ist gut 🙂

Ich habe folgendes versucht, aber keinen Erfolg gefunden:

  • Machen Sie die Variable zu einem CONSTANT, genau wie posts_per_page (was kein Problem verursacht).
  • Concating-Zitat um die $ category_id-Nummer – Das Ergebnis ist das gleiche wie überhaupt keine Anführungszeichen. Es funktioniert nicht.
  • ‘cat’ => array ($ category_id) – Ich habe einen Fehler gezogen – Es hat nicht gefallen
    dass es ein Array war.

Hat jemand irgendwelche Vorschläge?

Nun, hier ist, was “funktioniert” (lies: Ich könnte meine $ category_id verwenden und so tun, nicht den Rest der Argumente in der WP_Query () Array-Liste).

 'cat' => '"-'$category_id'"', 

Das heißt, ich konnte diese Katzen ID nicht. Verrückt, oder?

Wenn ich es nicht richtig lösen kann, werde ich ein komma-getrenntes Stechen meiner ganzen Katze machen, die aktuelle Katze analysieren und dann diese Zeichenfolge verwenden, um die Abfrage durchzuführen. Mit anderen Worten, wenn meine Katzen A, B und C waren, anstatt eine Anfrage für A zu machen (wie man es erwarten würde)

 'cat' => A 

Ich werde nach nicht B, nicht nach C fragen.

 'cat' => -B,-C 

Hoffentlich gibt es eine weniger hack-y-Lösung. Ich bin jetzt zu viele Stunden damit beschäftigt und ich bin verzweifelt genug, um diesen Hack zu benutzen und damit fertig zu werden. Trotzdem fühlt sich das für mich wie ein Fehler im core an. Ja, ich benutze 3.5.1 (oder sind wir jetzt bis zu .2 oder .3?). Mein Punkt ist, ich bin auf der neuesten Version (und das gleiche in 3.2.x).

Übrigens habe ich dieses Problem woanders gesehen (zB WP-Foren). Die eine Lösung schlug vor, dass das Array args kein Array, sondern eine Zeichenfolge sein sollte. Auch wenn das mit WP_Query möglich ist, wie würde ich die Liste / das Array für die post_types als String machen? Schließlich, wenn ich etwas falsch mache, dann benötigt die Codex-Hilfeseite ein Update, oder?

Hilfe. 🙂

Solutions Collecting From Web of "WP_Query und eine Variable für ‘cat’ => im Array args = WP Bug?"

Wo / wie definierst du $category_id ?

Referenzieren Sie den Codex-Eintrag für die Kategorieparameter von WP_Query() . WP_Query() erwartet, dass Kategorie-IDs als Ganzzahlen , nicht als Zeichenfolgen übergeben werden :

  • Wenn $category_id eine Ganzzahl ist , übergeben Sie sie an 'cat' .
  • Wenn $category_id ein Array (von Kategorie- IDs , wiederum als Ganzzahlen ) ist, übergeben Sie es an 'category__in'

Ich denke, es hat damit zu tun, wie man die Kategorie bekommt. Ich habe die function in einem Blog eingerichtet, an dem ich gerade arbeite. $category_id ist immer 0.

Um zu überprüfen, verwende ich diese Zeile für $category_id :

 global $post; $category_id = get_the_category($post->ID)[0]->term_id; 

Nur ein schneller Weg, um die erste Kategorie einem Beitrag zuzuordnen.

Danach war die Abfrage in Ordnung und der Parameter cat für die Abfrage wurde aufgefüllt.

Ich habe Ihre function getestet und es funktioniert einwandfrei. Sie haben wahrscheinlich einen Fehler mit einem anderen Code in Ihrem Theme oder einem Plugin-Konflikt. Oder vielleicht du Schleife ist nicht korrekt.

Als Referenz habe ich den folgenden Code auf category.php in Twentyvenven getestet, die Ausgabe war korrekt, ohne Fehler.

 wp_reset_query(); define("SOME_DEFINED_VALUE", 5); $category_id = get_cat_ID(single_cat_title('', false)); $my_query = new WP_Query(array( 'posts_per_page' => SOME_DEFINED_VALUE, 'cat' => $category_id, 'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 ), 'post_type' => array('post','post_custom_1','post_custom_2','post_custom_3') )); var_dump($my_query); 

Als ich Ihr Ding in handhabbare Stücke verschüttete, um sie zu analysieren, fand ich, dass das Problem am wahrscheinlichsten mit der “paged” Linie im Array war.

 wp_reset_query(); $category_id = get_cat_ID(single_cat_title('', false)); $paged = ( get_query_var('paged') )? get_query_var('paged') : 1 ; $query = array( 'posts_per_page' => 5, 'cat' => $category_id, 'paged' => $paged , 'post_type' => array('post','custom_1','custom_2','custom_3') ); $loop = new WP_Query( $query); print_r($loop); 

Wie Sie sehen können, habe ich eine zusätzliche Klammer um die erste get_query_var so dass sie ein richtiger ternärer Operator wurde. Ich habe das auf meinem Prüfstand versucht und es hat gut funktioniert.

Grüße, Andy