web-dev-qa-db-ja.com

Tax_query用語IDを使用する変数

カスタムの分類法用語IDを使用してカスタムのWP_Queryを作成したいです。

用語のIDの例:19,18,214,226,20

なぜこれが機能するのですか?

$query_args = array (
    'post_type' => 'works’,
    'tax_query' => array(
        array(
            'taxonomy'  => 'materials',
            'field'     => 'term_id',
            'terms'     => array( 19,18,214,226,20 ),
        )
    ),
);

すべての分類用語IDのすべての項目が表示されます。

しかし、これはそうではありません。

$tax = '19,18,214,226,20';

$query_args = array (
    'post_type' => 'works',
    'tax_query' => array(
        array(
            'taxonomy'  => 'materials',
            'field'     => 'term_id',
            'terms'     => array( $tax ),
        )
    ),
);

変数$taxを使用すると、クエリ結果は最初の用語ID(19)の項目のみを表示し、その他の項目はすべて無視します。

なぜこれが起こり、IDをハードコードするのではなく、tax_queryで変数を使用することができるのでしょうか。

2
Alex Costa

内部に単一の文字列を持つ配列を作っているようです。

渡す前に$ taxを配列にすることでうまくいくかどうかをチェックします。

$tax = array( 19, 18, 214, 226, 20 );

$query_args = array (
    'post_type' => 'works',
    'tax_query' => array(
        array(
            'taxonomy'  => 'materials',
            'field'     => 'term_id',
            'terms'     => $tax,
        )
    ),
);

フォーマットされた文字列から配列を作成する必要があるなら、デリミタと文字列を取り、配列を返すexplode PHP関数を使うことができます。

$tax_string = '19,18,214,226,20';
$tax_array = explode( ',', $tax_string );

うまくいくことを願っています!

5
Pedro Coitinho

なぜなら、phpでは$tax = '19,18,214,226,20';は文字列だからです。 array()内に文字列をラップして配列を作成することはできません。

次のようなものが必要になるかもしれません。

function comma_separated_to_array($string, $separator = ',')
{
  //Explode on comma
  $vals = explode($separator, $string);

  //Trim whitespace
  foreach($vals as $key => $val) {
    $vals[$key] = trim($val);
  }
  //Return empty array if no items found
  //http://php.net/manual/en/function.explode.php#114273
  return array_diff($vals, array(""));
}

そしてそれを使う

$terms= comma_separated_to_array($tax);
0
codiiv