尝试从主页上的类别中排除帖子

时间:2014-04-26 作者:Desi

我尝试了下面的代码来获取我的一个类别(观看isatv)的cat ID,并排除该类别中的所有帖子。然而,这些员额并没有被排除在外。代码有什么问题?

function excludeCat($query) {
    if ( $query->is_home ) {
        $catid = get_cat_ID(\'watch-isatv\');
        $query->set(\'cat\', \'-\'.$catid);
    }
    return $query;
}
add_filter(\'pre_get_posts\', \'excludeCat\');

2 个回复
SO网友:s_ha_dum

从技术上讲pre_get_posts 是一个操作,而不是筛选器,您不需要返回任何内容$query 是通过引用传入的,但该代码仍然可以工作。清理后将是:

function excludeCat($query) {
    if ( $query->is_home ) {
        $catid = get_cat_ID(\'watch-isatv\');
        $query->set(\'cat\', \'-\'.$catid);
    }
}
add_action(\'pre_get_posts\', \'excludeCat\');
不过,有几个潜在的故障点。

您正在运行主查询后添加筛选器。您必须在主查询之前添加该筛选器。functions.php 应该可以,但在其他主题模板文件中添加该代码,如archive.phphome.php 不会。已执行主查询

  • $query->is_home 不是你所期望或需要的。添加var_dump($query->is_home); 到您的代码并加载页面。确保它是true 你需要它在哪里false否则get_cat_ID() I不正确
  • 我会把钱投在问题1上。

    SO网友:Brad Dalton

    将此代码添加到子主题函数文件(&A);将007替换为要从主页中排除的帖子类别的ID。

    function wpsites_exclude_category_home( $query ) {
    if ( $query->is_home() && !is_admin() && $query->is_main_query() ) {
        $query->set( \'cat\', \'-007\' );
        }
    }
    add_action( \'pre_get_posts\', \'wpsites_exclude_category_home\' );
    

    结束

    相关推荐

    在插件对主题函数执行操作之前声明函数。php文件

    我正在使用一个插件,该插件使用以下格式声明函数:if (!function_exists(\'ABdevDND_get_current_post_type\')){ function ABdevDND_get_current_post_type() { ... } } 我试图在我的主题函数中声明它。php文件,只需使用:function ABdevDND_get_current_post_type() { ...&#x