it-swarm.com.de

WP_Query und Verwendung einer Variablen für 'cat' => im args-Array = WP Fehler?

Für diese Diskussion ist 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. Folgendes ist mir aufgefallen.

Wenn ich das print_r ($ my_query) mache; Ich kann die query_vars in der ersten Zeile sehen. Sie stimmen nicht mit meinen Array-Argumenten überein. Beispielsweise wird für posts_per_page standardmäßig ein anderer Wert verwendet (nicht CONSTANT), und die post_type-Liste enthält kein post mehr (das sollte/muss).

Wenn ich die Zeile mit 'cat' => entferne oder den Wert ('cat' => 3) fest codiere, 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:

  • Verwandle die Variable in eine KONSTANTE, genau wie posts_per_page (was kein Problem verursacht).
  • Konzentrieren des Zitats um die $ category_id-Nummer - Das Ergebnis ist dasselbe wie überhaupt kein Zitat. 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?

Hier ist, was "funktioniert" hat (lesen Sie: Ich konnte meine $ category_id verwenden und habe damit den Rest der Argumente in der WP_Query () -Array-Liste nicht durcheinander gebracht).

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

Das heißt, ich konnte diese Katze nicht ausweisen. Verrückt, richtig?

Wenn ich es nicht richtig lösen kann, werde ich einen durch Kommas getrennten Stich von all meiner Katze haben, die nicht erkannt wurde, die aktuelle Katze auswerten und dann diese Zeichenfolge verwenden, um die Abfrage durchzuführen. Mit anderen Worten, wenn meine Katzen A, B und C wären, anstatt nach A zu fragen (wie man es erwarten würde)

'cat' => A

Ich werde nach nicht B, nicht C fragen.

'cat' => -B,-C

Hoffentlich gibt es eine weniger hackige Lösung. Ich habe jetzt zu viele Stunden damit verbracht und bin verzweifelt genug, diesen Hack zu nutzen und damit fertig zu werden. Das heißt, das fühlt sich für mich sicher wie ein Käfer im Kern an. Ja, ich verwende 3.5.1 (oder haben wir jetzt .2 oder .3?). Mein Punkt ist, ich bin auf der neuesten Version (und dies tat das gleiche in 3.2.x).

übrigens habe ich gesehen, dass dieses Problem an einer anderen Stelle veröffentlicht wurde (z. B. in WP Foren). Die eine Lösung schlug vor, dass das Array args kein Array, sondern eine Zeichenfolge ist. Selbst wenn dies mit WP_Query möglich ist, wie würde ich die Liste/das Array für die post_types als Zeichenfolge ausführen? Wenn ich schließlich etwas falsch mache, muss die Codex-Hilfeseite aktualisiert werden, oder?

Hilfe. :)

2
Chief Alchemist

Wo und wie definieren Sie $category_id?

Referenz der Codex-Eintrag für die Parameter der Kategorie WP_Query() . WP_Query() erwartet, dass Kategorie-IDs als Ganzzahlen und nicht als Zeichenfolgen übergeben werden:

  • Wenn $category_id eine Ganzzahl ist, übergeben Sie sie an 'cat'.
  • Wenn $category_id ein Array (der Kategorie IDs ist, geben Sie ihn erneut als Ganzzahlen) an 'category__in' weiter.
2
Chip Bennett

Ich denke, es hängt damit zusammen, wie Sie die Kategorie erhalten. Ich habe die Funktion in einem Blog eingerichtet, an dem ich arbeite. $category_id ist immer 0.

Um zu überprüfen, benutze 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 in der Abfrage wird ausgefüllt.

0
Simon

Ich habe Ihre Funktion getestet und sie funktioniert einwandfrei. Daher haben Sie wahrscheinlich einen Fehler mit einem anderen Code in Ihrem Design oder einen Plugin-Konflikt. Oder vielleicht ist deine Schleife nicht korrekt.

Als Referenz habe ich den folgenden Code auf category.php in siebenundzwanzig 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);
0
Wyck

Als ich Ihr Ding in überschaubare Stücke aufteilte, um sie zu analysieren, stellte ich fest, dass das Problem höchstwahrscheinlich bei der "ausgelagerten" Zeile im Array lag.

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, habe ich eine zusätzliche Klammer um den ersten get_query_var eingefügt, damit er zu einem richtigen ternären Operator wird. Ich habe das auf meinem Prüfstand ausprobiert und es hat einwandfrei funktioniert.

grüße Andy

0
Andy Killen