我使用此代码从帖子的第一个类别中选择相关帖子,但如果其中一个类别首先显示,我需要排除/跳过其中一个类别。
<?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(); ?>
我该怎么做?
答案 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],