排除在相关帖子中显示的特定类别帖子

时间:2016-12-26 18:31:05

标签: php wordpress

我使用此代码从帖子的第一个类别中选择相关帖子,但如果其中一个类别首先显示,我需要排除/跳过其中一个类别。

<?php 
    // the query
    global $post;
    // We should get the first category of the post
    $categories = get_the_category( $post->ID );
    $first_cat = $categories[0]->cat_ID;
    $the_query = new WP_Query(  $args = array(
            // It should be in the first category of our post:
            'category__in' => array( $first_cat ),
            // Our post should NOT be in the list:
            'post__not_in' => array( $post->ID ),
            // ...And it should fetch 9 posts
            'posts_per_page' => 9,
            'orderby' => 'desc'
        )); ?>
    <?php if ( $the_query->have_posts() ) : ?>
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>

我该怎么做?

1 个答案:

答案 0 :(得分:2)

如果您想查找“相关”帖子,除非相关类别为81,您可以执行以下操作:

$categories_to_exclude [ 81, 11, 21 ];
$first_cat  = false; 
$categories = get_the_category( $post->ID );
while ( ! empty( $categories ) && false === $first_cat ) {
   if ( in_array($categories[0]->cat_ID, $categories_to_exclude) ) {
      array_shift($categories);
   }
   else {
       $first_cat = $categories[0]->cat_ID;
   }
}

您获得了get_the_category的类别。然后在while循环中,如果它是81,则跳过第一个类别,然后再看一遍。如果它不是81(并且您仍有类别可用),则将其与$first_cat对齐并继续。

如果$first_cat不是false,那么您只会执行“相关”查询。

对您的评论感到困惑,但如果您想要从搜索中排除一个或多个类别中的帖子,则必须使用category__not_in,它接受​​一个数组。所以你可以这样做:

'category__not_in' => [44, 71, 85],