web-dev-qa-db-ja.com

WP 複数のカテゴリを使用したクエリ - 配列の引き渡しは機能しますか?

コーデックスによると、カテゴリのコレクションのいずれかに属することができる投稿を照会するには、次のようにする必要があります。

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

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

しかし、私は以下のものを持っています。

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

私が混乱しているのは、$ related_cat_idsが実際には配列であるためです。しかし、この例では、 'cat'の値として、カンマで区切られた一連の数字が明確に示されています。

これは私が心配すべきことですか?将来のWordPressのリリースで私のコードが突然機能しなくなるのでしょうか?私の場合は、配列をその文字列にフォーマットするよりも使い続ける方が便利です。その理由は、カテゴリを動的に取得するためにget_the_category()を使用してから、その配列から新しい配列にIDをプッシュするためです。

1
Jordan Carter

私はあなたの混乱を理解していますが、Wordpressがそれを機能させるために必要なすべてのステップを踏む舞台裏で心配することは何もありません。

たとえば、class-wp-query.phpから次のコードを取ります。

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

が配列かどうかを確認し、結果をすばやくコンマ区切りの文字列に変換します。

他の方法は次のような他のオプションを使うことです。

 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).

これについての詳細は Category_Parameters

しかし、私はあなたがより快適に感じる方法を使用したいと思います。

array()フォーマットを使うのがもっと便利だと思うなら、これを使っても問題ありません。これは、 Wordpress を作成するための楽しいツールです。

2
Drupalizeme

はい、うまくいきます。情報がコーデックスに提供されていない可能性があります。しかし、パラメータに関するコード ここ を見ると、配列が渡されてもそれが文字列に変更されていることがわかります。

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

だからあなたは安全でなければなりません。私の知る限りでは、文字列と配列の両方が引数として受け入れられることは良いことです、そしてWordPressコミュニティはそれをそのままにしておくでしょう。

まだ疑問がある場合でも、常に以下のように常に配列を取るcategory__inパラメータを使用できます。

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