web-dev-qa-db-ja.com

特定のカテゴリに属する​​投稿が唯一のカテゴリである場合にのみ、その投稿をフィルタ処理する方法

カテゴリが唯一のカテゴリである場合に限り、カテゴリに属する​​投稿をフィルタ処理する必要があります。たとえば、投稿Aがcat1に属していて、cat1に属する投稿を表示したくない場合、投稿Aは表示されません。しかし、投稿Aがcat1とcat2に属している場合は、cat2をフィルタリングしたくないので表示されます。

私はこのようなことをやろうとしました:

<?php while (have_posts()) : the_post(); ?>

$category_to_exclude = 11;
while ( have_posts() ) : the_post();
$categories = get_the_category();
if( in_array($category_to_exclude, $categories) && count($categories) > 1 ) {
    the_title();
    the_content();
}
endwhile;

しかしもちろん、それは投稿を「カットオフ」するだけでは正しく機能しません。投稿を取得するために使用されたクエリから直接フィルタリングする必要がありますが、このクエリの書き方はわかりません。何か案が?

1
Randomize

投稿を照会する前に、除外する投稿を知っておく必要があるため、複数のクエリが必要になります。

私は個人的に「カットオフ」に悪いことは何も見ていません。このコードは正しく動作するはずです。

更新:ページネーションを壊します(コメント参照)。

<?php
$category_to_filter = 11;
while ( have_posts() ) : the_post();
    $categories = get_the_category();
    if( in_array($category_to_filter, $categories) && count($categories) > 1 ) {
        the_title();
        the_content();
    }
endwhile;

更新:次のコードではページ区切りが壊れません。

<?php
$category_to_filter = 11;
$posts_in = array();
while ( have_posts() ) : the_post();
    $categories = get_the_category();
    if( in_array($category_to_filter, $categories) && count($categories) > 1 ) {
        $posts_in[] = $post->ID;
    }
endwhile;

$my_query = new WP_Query( array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'post__in' => $posts_in
    )
);

while ( $my_query->have_posts() ) : $my_query->the_post();
    // your template stuff here
endwhile;
wp_reset_query();
2
Max Yudin