使用PRE_GET_POST排除

时间:2013-02-09 作者:Jamie

我正在尝试使用pre\\u get\\u posts来排除发布到主页的类别。如果我这样做的话,效果很好

 $query->set( \'cat\', \'-13,-7,-19,-12,-24,-21,-14\');
这是硬编码的。我正在建立一个自定义管理员,列出管理员菜单中的类别。所以现在我想使用在管理菜单中选择的id。因此,我已将id分配给一个变量,当我var\\u转储该变量时,这就是我得到的

 string(2) "13"
 string(1) "7"
 string(2) "19"
 string(2) "12"
 string(2) "24"
 string(2) "21"
 string(2) "14"
所有这些都被分配到变量$类别,所以我想我可以这样做

 $category = get_option( \'excludecats\' );
 foreach( $category as $exclude ){
    $query->set( \'cat\', \'-\'.$exclude );
 }
当我查看源代码时,我预计会有1987行代码,但我最终得到的是3117行代码,试图使用foreach来排除它们。我做错了什么?

3 个回复
最合适的回答,由SO网友:david.binda 整理而成

尝试使用“,”作为粘合剂内爆$类别。每次foreach运行中提到的代码都会重写cat变量$query。

$query->set(\'cat\', implode(\',\', $category));

SO网友:Chris_O

当您使用pre_get_posts 操作您有权更改query_vars 使用set method.

根据上面链接的codex文档,您可以使用数组并将其设置为“category\\u not\\u in”query\\u var的值。

$query->set( \'category__not_in\', $category );

SO网友:Jamie

这是我最后使用的代码

 function wpa83038_posts_and_pages_on_home( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
    $query->set( \'post_type\', array( \'post\', \'page\') );
    //GETTING THE OPTION FROM TEH ADMIN TO EXCLUDE THE BLOG POSTS FROM THE HOMEPAGE.
            //using option tree for the WordPress admin area
    if( function_exists( \'ot_get_option\' )){
        $category = ot_get_option( \'excludecats\' );

        $exclude = implode(",-",$category);
        $exclude = \'-\'.$exclude;
        $query->set( \'cat\', $exclude);
    }
  }
}

结束

相关推荐

Exclude stylesheet from admin

我一直在使用以下函数将一些CSS排入我的主题。但是,它们也用于管理领域:wp_enqueue_style(...) 我不想在管理领域使用它们。遗憾的是,无论是在这里还是在谷歌上,我都找不到与此功能相结合的任何信息。codex也没有对此进行解释,该函数不支持将管理区域排除在外的选项应用于特定样式。我希望有人能告诉我如何从管理区域中排除特定的css。提前谢谢。