我想在我的博客底部显示4篇相关帖子(没有插件)。但是,我想排除某个类别。
例如,如果我的博客文章属于类别2
和3
, 我想忽略类别2
并且只查找类别为的博客帖子3
. 以下是single.php
:
Note: 我下面的代码当前不工作
$related = get_posts( array(
\'category__in\' => wp_get_post_categories( $post->ID ),
\'numberposts\' => 4,
\'orderby\' => \'date\',
\'post__not_in\' => array( $post->ID ),
\'cat\' => \'-2\'
) );
if( $related ) {
foreach( $related as $post ) {
setup_postdata($post);
/** .. **/
}
}
Update: 类别
2
是如此普遍,我想在搜索中忽略它,但不想隐藏这些结果。
例如,此帖子属于类别2
和3
. 我想找到其他类别的帖子3
, 也许他们有分类2
, 但我只想按类别搜索3
.
Update 2: 我有以下代码,我相信它现在工作正常:
$cat_ids = get_the_category();
if( ! empty( $cat_ids ) ) {
$post_cat_ids = array();
foreach( $cat_ids as $cat_id ) {
if( $cat_id->cat_ID != 2 ) {
$post_cat_ids[] = $cat_id->cat_ID;
}
}
}
$related = get_posts( array(
\'category__in\' => wp_get_post_categories( $post->ID ),
\'numberposts\' => 4,
\'orderby\' => \'date\',
\'exclude\' => array( $post->ID ),
\'category\' => $post_cat_ids
) );
最合适的回答,由SO网友:Fayaz 整理而成
我可以从你的问题中得出以下结论:
要忽略相关post查询中的一个类别(可能更多)。
但是,您不想实际将这些帖子从该类别中排除(如果任何帖子属于该类别,但也属于您要查找的其他类别)。
根据上述假设,您可以使用以下代码(注释中的代码中给出了一些解释):
// set the category ID (or multiple category IDs)
// you want to ignore in the following array
$cats_to_ignore = array( 2 );
$categories = wp_get_post_categories( get_the_ID() );
$category_in = array_diff( $categories, $cats_to_ignore );
// ignore only if we have any category left after ignoring
if( count( $category_in ) == 0 ) {
$category_in = $categories;
}
$cat_args = array(
\'category__in\' => $category_in,
\'posts_per_page\' => 4,
\'orderby\' => \'date\',
\'post__not_in\' => array( get_the_ID() )
);
$cat_query = new WP_Query( $cat_args );
while ( $cat_query->have_posts() ) : $cat_query->the_post();
/* just example markup for related posts */
echo \'<h2><a href="\' . get_the_permalink() . \'">\' . get_the_title() . \'</a></h2>\';
endwhile;
// reset $post after custom loop ends (if you need the main loop after this point)
wp_reset_postdata();
您不能使用
\'cat\' => \'-2\'
或
\'category__not_in\' => array(2)
因为这将排除所有具有类别的帖子
2
, 即使这些帖子也有其他类别。因此,我没有排除,而是忽略了类别
2
在使用此代码的查询中:
array_diff( $categories, $cats_to_ignore );
.
Note: 我用过WP_Query
而不是get_posts()
因为迭代WP_Query
看起来更像原始循环。但你当然可以使用get_posts()
函数以及它调用的WP_Query
无论如何,在内部。