カテゴリ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
));
しかし、それは正しい選択をしていません。何がおかしいのですか?
結局のところ、これは4つの別々の方法で行うことができます
負の数を持つcat
を使用
$query = new WP_Query(array(
"cat" => "4, -2",
// ...
));
category__in
およびcategory__not_in
を使用
私は誤ってnot有効なWP_Queryパラメーターであるcat__in
とcat__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");
ループに表示したくないカテゴリを除外するには 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
を参照してください。