按类别、用户角色限制查看帖子

时间:2017-10-04 作者:rickibarnes

answer here 这几乎正是我想要的,但我只是很难让它对我有用。

基本上,我已经使用add_role()register_activation_hook(). 然后,我希望能够根据这些用户角色限制用户查看特定内容。他们根本不允许编辑。

此时,我刚刚将该答案中的代码删除到了我的函数中。php,并用我的类别对其进行了编辑。看起来是这样的:

add_filter(\'template_include\', \'restict_by_category\');

function check_user() {
    $user = wp_get_current_user();
    if ( ! $user->ID || in_array(\'subscriber\', $user->roles) ) {
        // user is not logged or is a subscriber
        return false;
    }
    return true;
}

function restict_by_category( $template ) {
    if ( ! is_main_query() ) return $template; // only affect main query.
        $allow = true;
        $private_categories = array(\'pilots\', \'instructors\');

        if ( is_single() ) {
            $cats = wp_get_object_terms( get_queried_object()->ID, \'category\', array(\'fields\' => \'slugs\') ); // get the categories associated to the required post

            if ( array_intersect( $private_categories, $cats ) ) {
                // post has a reserved category, let\'s check user
                $allow = check_user();
            }

        } elseif ( is_tax(\'category\', $private_categories) ) {
            // the archive for one of private categories is required, let\'s check user
            $allow = check_user();
    }

    // if allowed include the required template, otherwise include the \'not-allowed\' one
    return $allow ? $template : get_template_directory() . \'/not-allowed.php\';
}
到目前为止,我所期望的是,如果用户没有登录,或者作为订阅者登录,他们将无法看到在其类别列表中包含“飞行员”或“讲师”的帖子。实际上,“飞行员”和“教员”的职位对每个人都是可见的。

讨论中的特定帖子和类别是通过使用知识库插件创建的。所以我想知道,这会不会因为我的“类别”实际上是自定义分类法而不起作用?如果是,我如何才能确定这一点?

或者我的代码中是否有错误/缺失?

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

事实证明,我的类别的问题在于它是一种自定义分类法:

elseif ( is_tax(\'category\', $private_categories) )
必须是

elseif ( is_tax(\'wzkb_category\', $private_categories) )
非常简单,但将来可能会有人走上正确的道路。

结束

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register