webentwicklung-frage-antwort-db.com.de

WP Abfrage mit mehreren Kategorien - Übergeben eines Arrays funktioniert?

Um Posts abzufragen, die zu einer Sammlung von Kategorien gehören können, müssen wir laut Codex etwa Folgendes tun:

$query = new WP_Query( array( 'cat' => '2,6,17,38' ) );

https://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters

Ich habe jedoch die folgenden, die funktioniert, und ich bin nicht sicher, warum.

  $args = array(
    'cat' => $related_cat_ids,
    'posts_per_page' => -1,
  );
  $query = new WP_Query($args);

Der Grund, warum ich verwirrt bin, ist, dass $ related_cat_ids eigentlich ein Array ist, aber das Beispiel zeigt deutlich eine durch Kommas getrennte Folge von Zahlen für den Wert 'cat'.

Sollte ich mir darüber Sorgen machen? Funktioniert mein Code in einer zukünftigen WordPress-Version plötzlich nicht mehr? In meinem Fall ist es praktischer, das Array weiterhin zu verwenden, als es in diese Zeichenfolge zu formatieren. Der Grund dafür ist, dass ich get_the_category() verwende, um die Kategorien dynamisch abzurufen und dann die IDs von diesem Array in mein neues Array zu übertragen.

1
Jordan Carter

Ich verstehe Ihre Verwirrung, aber Sie brauchen sich keine Sorgen zu machen, da Wordpress hinter den Kulissen alle notwendigen Schritte unternimmt, damit es funktioniert.

Nehmen Sie zum Beispiel den folgenden Code aus dem class-wp-query.php

// If querystring 'cat' is an array, implode it.
if ( is_array( $q['cat'] ) ) {
    $q['cat'] = implode( ',', $q['cat'] );
}

Überprüft, ob es sich um ein Array handelt, und wandelt das Ergebnis schnell in eine durch Kommas getrennte Zeichenfolge um.

Ein anderer Weg wird die anderen Optionen verwenden wie:

 category__and           An array of category IDs (AND in).
 category__in            An array of category IDs (OR in, no children).
 category__not_in        An array of category IDs (NOT in).

Mehr dazu in Category_Parameters

Aber auch hier würde ich es halten, um die Art und Weise zu nutzen, die Sie bequemer finden.

Es ist vollkommen in Ordnung, das array()-Format zu verwenden, wenn Sie es nützlicher finden. Außerdem ist es das, was Wordpress zu einem unterhaltsamen und nützlichen Werkzeug macht, an dem Sie arbeiten können.

2
Drupalizeme

Ja, es wird funktionieren. Die Informationen sind möglicherweise nicht im Codex enthalten. Wenn Sie sich jedoch den Code hier für den Parameter ansehen, werden Sie feststellen, dass ein Array, auch wenn es übergeben wird, in einen String geändert wird.

    // If querystring 'cat' is an array, implode it.
    if ( is_array( $q['cat'] ) ) {
        $q['cat'] = implode( ',', $q['cat'] );
    }

Du solltest also in Sicherheit sein. Für mich ist es eine gute Sache, dass sowohl Strings als auch Arrays als Argumente akzeptiert werden und die WordPress-Community es so lassen wird, wie es ist.

Auch wenn Sie immer noch Zweifel haben, können Sie den Parameter category__in verwenden, der immer ein Array wie folgt annimmt:

$args = array(
'category__in' => $related_cat_ids,
'posts_per_page' => -1,
);
$query = new WP_Query($args);
0
ghoul