这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\';
}
到目前为止,我所期望的是,如果用户没有登录,或者作为订阅者登录,他们将无法看到在其类别列表中包含“飞行员”或“讲师”的帖子。实际上,“飞行员”和“教员”的职位对每个人都是可见的。
讨论中的特定帖子和类别是通过使用知识库插件创建的。所以我想知道,这会不会因为我的“类别”实际上是自定义分类法而不起作用?如果是,我如何才能确定这一点?
或者我的代码中是否有错误/缺失?
最合适的回答,由SO网友:rickibarnes 整理而成
事实证明,我的类别的问题在于它是一种自定义分类法:
elseif ( is_tax(\'category\', $private_categories) )
必须是
elseif ( is_tax(\'wzkb_category\', $private_categories) )
非常简单,但将来可能会有人走上正确的道路。