排除类别的Pre_Get_Posts

时间:2013-03-14 作者:Orbital

此代码工作正常

function exclude_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'cat\', \'-1\' );
    }
}
add_action( \'pre_get_posts\', \'exclude_category\' );
但是这个代码根本不起作用

$caid = "-1";
function exclude_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'cat\', $caid );
    }
}
add_action( \'pre_get_posts\', \'exclude_category\' );

2 个回复
最合适的回答,由SO网友:tfrommen 整理而成

$caid 函数内部未知,除非声明为全局。

$caid = \'-1\';
function exclude_category( $query ) {
    global $caid;
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'cat\', $caid );
    }
}
add_action( \'pre_get_posts\', \'exclude_category\' );
// Edit
是否需要函数外部的变量?如果没有,只需将其移动到函数内部,然后您可以操作global.

PHP: Variable scope

SO网友:hakre

您也可以使用closures in PHP:

$catid = "-1";

$excludeCategory = function ($catid)
{
    return function ($query)
    {
        if (
            $query->is_home() 
            && $query->is_main_query()
        ) {
            $query->set(\'cat\', $catid);
        }
    };
};

add_action(\'pre_get_posts\', $excludeCategory($catid));
这是一个返回函数的函数。因此,可以在注册时将catid作为参数传入pre_get_posts 行动

结束

相关推荐