web-dev-qa-db-ja.com

あるカテゴリから投稿を選択し、別のカテゴリの投稿を除外する方法は?

カテゴリIDが4の投稿を選択しようとしていますが、カテゴリIDが2の投稿は除外しています

これが私がしようとしているものです

$query = new WP_Query(array(
  "cat__in"         => array(4),
  "cat__not_in"     => array(2),
  "post_type"       => "post",
  "post_status"     => "publish",
  "orderby"         => "date",
  "order"           => "DESC",
  "posts_per_page"  => $limit,
  "offset"          => 0
));

しかし、それは正しい選択をしていません。何がおかしいのですか?

2
user633183

結局のところ、これは4つの別々の方法で行うことができます

負の数を持つcatを使用

$query = new WP_Query(array(
  "cat" => "4, -2",
  // ...
));

category__inおよびcategory__not_inを使用

私は誤ってnot有効なWP_Queryパラメーターであるcat__incat__not_inを使っていました

$query = new WP_Query(array(
  "category__in"     => array(4),
  "category__not_in" => array(2),
  // ...
));

tax_queryを使う

$query = new WP_Query(array(
  "tax_query" => array(
    "relation" => "AND",
    array(
      "taxonomy" => "category",
      "field"    => "term_id",
      "terms"    => array(4)
    ),
   array(
      "taxonomy" => "category",
      "field"    => "term_id",
      "terms"    => array(2),
      "operator" => "NOT IN"
    ),
  ),
  // ...
));

pre_get_postsフィルタの使用(Brad Daltonによる提供)

function exclude_posts_from_specific_category($query) {
  if ($query->is_home() && $query->is_main_query()) {
    $query->set("cat", "-2");
  }
}
add_action("pre_get_posts", "exclude_posts_from_specific_category");
1
user633183

ループに表示したくないカテゴリを除外するには pre_get_posts を使用します。

function exclude_posts_from_specific_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'cat', '-2' );
    }
}
add_action( 'pre_get_posts', 'exclude_posts_from_specific_category' );

または、新しい WP_Query を作成してCategory Parametersを使用します。

<?php

$args = array( 

'category__not_in' => 2 ,

'category__in' => 4 

);

$the_query = new WP_Query( $args );


if ( $the_query->have_posts() ) {
        echo '<ul>';
        while ( $the_query->have_posts() ) {
        $the_query->the_post();
        echo '<li>' . get_the_title() . '</li>';
    }
        echo '</ul>';
} else {

}

wp_reset_postdata();

1つのカテゴリからの投稿のみを表示したい場合は、カテゴリアーカイブを使用します。 Template Hierarchy を参照してください。

2
Brad Dalton