web-dev-qa-db-ja.com

Wordpress tax_queryにすべての用語を含める

少し混乱していますが、tax_queryにすべての用語を自動的に含めることができないのはなぜですか?

私のコード:

'tax_query' => array(
    array(
        'taxonomy' => 'city',
        'field' => 'slug',
        'terms' => array( nyc, boston, london ),
         )
)

何十もの都市があるとしたら?それらすべてを手動で追加してもかまいませんか。

2
wp student

don't という投稿がなければ、あなたは本質的にすべての投稿を問い合わせているのではありませんか。とにかく、Eric Holmesはあなたがquery_posts()の代わりに WP_Query を使うべきであることは正しいです。

そうは言っても、分類法のすべての用語のリストを入手してから、それらの値を税務照会に使用することができます。

// get all terms in the taxonomy
$terms = get_terms( 'city' ); 
// convert array of term objects to array of term IDs
$term_ids = wp_list_pluck( $terms, 'term_id' );

// proceed with tax query
$args = array ('tax_query' => array(
    array(
        'taxonomy' => 'city',
        'field' => 'term_id',
        'terms' => $term_ids,
         )
)
);

$city_posts = new WP_Query( $args );
6
helgatheviking

まず、query_postsを使わないでください。代わりに新しい WP_Query オブジェクトを作成してください。

次に、文字通りすべてのカテゴリを追加している場合、なぜすべてのカテゴリを追加する必要があるのでしょうか。これはすべての投稿を取得するのと同じではないでしょうか。どちらを含めないかを指定することもできます。すなわち。 「シカゴ以外のすべて」。

1
Eric Holmes

マークされた「ベストアンサー」に加えて、最初に用語を抽出して名前を抽出する必要がないため、さらに高速な方法があります。

これは、存在しない演算子( 'IN'、 'NOT IN'、 'AND'、 'EXISTS'、 'NOT EXISTS'のどれも)を使用することによるトリックで達成されます。たとえば、文字列 'XXX'はその仕事をし、クエリの生成中にWPがケースに入らないようにします。したがって、0 = 1の連結もスキップされます。

(ケースはファイルclass-wp-tax-query.phpの関数get_sql_for_clause()にあります。ここでは許可された演算子が条件によってチェックされ、 'else'はありません。).

$args = array ('tax_query' => 
     array(
         array(
              'taxonomy' => 'city',
              //'field' => 'term_id', // <-- not needed, default
              //'terms' => $term_ids, // <-- not needed
              'operator' => 'XXX'     // Use a non-existing operator
         )
     )
);