web-dev-qa-db-ja.com

"tax_query"パラメータがWP_Queryで機能しない

「エピソード」というカスタム投稿タイプがあります。 「エピソード」に付け加えて、私は「video_type」と呼ばれるカスタム分類法を持っています。それは2つの用語を含んでいます。 「エピソード」には、「season-1」と「season-2」の2つの子用語が含まれています(他の季節も将来追加される予定です)。 'episode'タイプの最新の投稿のみを取得したいが、 'bonus-footage'という用語からの投稿は含めないでください。以下は私がこれに使っているコードです。

<?php
$some_args = array(
    'tax_query' => array(
        'taxonomy' => 'video_type',
        'terms' => 'bonus-footage',
        'field' => 'slug',
        'include_children' => true,
        'operator' => 'NOT IN'
     ),
    'posts_per_page' => 1,
    'post_type' => 'episode',
);

$s = new WP_Query( $some_args );

if ( $s->have_posts() ) : $s->the_post();
    // Do something with this post.
endif;
?>

「季節」の用語のいずれかの投稿が最新の場合、クエリは予想どおりに機能しますが、「ボーナスフッテージ」の投稿が最新の場合は、その投稿が読み込まれます。言い換えれば、私の "tax_query"パラメータはクエリに影響を与えないようです。 "tax_query"を正しくフォーマットしていませんか、それとも他に何か不足していますか?

下記のように "tax_query"を設定してみました。

'tax_query' => array(
        'taxonomy' => 'video_type',
        'terms' => 'episode',
        'field' => 'slug',
    'include_children' => true,
        'operator' => 'IN'
),

しかし、私はまだ同じ結果を得ています。

15
Josh Farneman

tax_queryパラメータは、単なる配列ではなく、 配列の配列 です。

この:

'tax_query' => array(
        'taxonomy' => 'video_type',
        'terms' => 'episode',
        'field' => 'slug',
        'include_children' => true,
        'operator' => 'IN'
),

代わりにこれであるべきです:

'tax_query' => array(
    array(
        'taxonomy' => 'video_type',
        'terms' => 'episode',
        'field' => 'slug',
        'include_children' => true,
        'operator' => 'IN'
    )
),
37
Chip Bennett