隐藏管理所有帖子页面中的特定类别(WordPress)

时间:2018-07-14 作者:vexx

基本上,当我在Wordpress Admin中查看所有帖子页面时,我想过滤掉特定类别中的所有帖子,以便现在显示在那里。

经过一些搜索,我找到了这个钩子,但它在这个实例中不起作用。

function exclude_category_posts( $query ) {

    if ( $query->is_main_query() && !is_admin() && $query->is_home() ) {
        $query->set( \'cat\', \'-13, -14, -15, -16\' );
    }

}
add_filter( \'pre_get_posts\', \'exclude_category_posts\' );
提前感谢

1 个回复
SO网友:Tom J Nowell

如果我们查看官方文件WP_Query:

https://codex.wordpress.org/Class_Reference/WP_Query#Category_Parameters

显示与特定类别关联的帖子。

  • cat (int)-使用类别id。
  • category_name (字符串)-使用类别slug
  • category__and (数组)-使用类别id。
  • category__in (数组)-使用类别id。
  • category__not_in (数组)-使用类别id。
问题是cat 需要类别ID,而不是值数组。

我们还可以看到category__not_in, 我们可以使用实际的数组,而不是逗号分隔的列表:

$query->set( \'category__not_in\', [13,14,15,16] );
这导致了另一个问题,即:

if ( $query->is_main_query() && !is_admin() && $query->is_home() ) {
如果你想在管理员上运行这个,为什么这部分在检查中?

!is_admin() && $query->is_home()
它说,如果不是管理员,而我们在主页上,那么就执行X。但你想要的是相反的结果!移除is home位,并反转is_admin 通过删除!. 这部分需要初级PHP技能才能完成。

最后,要求数据库排除内容、遗漏内容是很昂贵的,而且随着内容量的增加,成本会变得过高。

此外,您永远不应该硬编码ID,只需要有人删除类别并重新创建它,站点迁移等等,然后它就被破坏了

结束

相关推荐

Cross Site Related Posts?

这似乎是一个很重要的目标,但它可以帮助我加载,所以目前我有这个结构来返回我的音乐网站的相关帖子,它可以完美地返回一个网站的结果。$tags = wp_get_post_tags($post->ID); if ($tags) { $first_tag = $tags[0]->term_id; $args=array( \'post_type\' => \'post\', \'s\' => $loopartist, \'pos