web-dev-qa-db-ja.com

カスタム分類法の「category__and」

カスタム投稿タイプ 'post-type-x'と、それに関連付けられた3つのカスタム分類法 'taxonomy-1'、 'taxonomy-2'、 'taxonomy-3'があります。

カスタム分類法 'taxonomy-1'と 'taxonomy-2'を持つすべての投稿を取得したいです。

Query_posts関数に渡す引数配列は何になりますか?

$args = array ( ..?.. )
2
Omar Tariq

この質問は誤解を招く可能性があると思います。あなたは言う:

カスタム分類法 'taxonomy-1'と 'taxonomy-2'を持つすべての投稿を検索したい

しかし

bothtaxonomy-1、taxonomy-2、およびtaxonomy-3の関連性のない投稿が必要ですか。

$args = array(
  'post_type' => 'post-type-x',
  'tax_query' => array(
    'relation' => 'AND',
    array(
      'taxonomy' => 'taxonomy-1',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-1', array('fields' => 'ids', 'hide_empty' => false) )
    ),
    array(
      'taxonomy' => 'taxonomy-2',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-2', array('fields' => 'ids', 'hide_empty' => false) )
    )
  )
);

または

bothtaxonomy-1とtaxonomy-2を持つがnottaxonomy-3の投稿はありますか。

$args = array(
  'post_type' => 'post-type-x',
  'tax_query' => array(
    'relation' => 'AND',
    array(
      'taxonomy' => 'taxonomy-1',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-1', array('fields' => 'ids', 'hide_empty' => false) )
    ),
    array(
      'taxonomy' => 'taxonomy-2',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-2', array('fields' => 'ids', 'hide_empty' => false) )
    ),
    array(
      'taxonomy' => 'taxonomy-3',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-3', array('fields' => 'ids', 'hide_empty' => false) ),
      'operator' => 'NOT IN'
    )
  )
);

または

タクソノミー-1またはタクソノミー-2、タクソノミー3とは無関係の投稿が必要ですか。

$args = array(
  'post_type' => 'post-type-x',
  'tax_query' => array(
    'relation' => 'OR',
    array(
      'taxonomy' => 'taxonomy-1',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-1', array('fields' => 'ids', 'hide_empty' => false) )
    ),
    array(
      'taxonomy' => 'taxonomy-2',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-2', array('fields' => 'ids', 'hide_empty' => false) )
    )
  )
);

get_termsはdbクエリを実行するため、これらの種類のクエリはパフォーマンスが良くないことに注意してください。したがって、上記のコードを使用すると、ページビューが遅くなるクエリがいくつかあることになります。

このコードを含むファイルで、分類用語のID(またはスラッグ)の配列を含むいくつかの変数にアクセスできる場合は、それらを使用してパフォーマンスを向上させることができます。

別の方法としては、適切なSQLクエリとともに$wpdb->get_resultsを使用してカスタムdbクエリを作成することです。

2
gmazzap