添加限制用户在特定类别中发帖的角色

时间:2014-12-08 作者:MultiformeIngegno

我正在尝试创建一个角色,该角色限制发布到特定类别的能力,并在复选框中隐藏另一个类别。

我不想使用插件。我正在寻找一个代码片段来放入函数中。php。我查看了所有关于这方面的问题/博客帖子,没有找到有效的解决方案。

我认为这是一个起点。。

   <?php
    $result = add_role( \'category_restricted\', \'Restricted to specific cat\', array(
        \'read\' => true,
        \'edit_posts\' => true,
        \'delete_posts\' => false,
    ));
你能帮帮我吗?

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

您可以使用get_terms 如果当前用户不是管理员,或者在这种特定情况下,如果用户没有您分配的角色,则通过钩子查找所有类别并通过ID或slug限制对它们的访问。

add_filter(\'get_terms\', \'restrict_categories\');
function restrict_categories($categories) { 
    $onPostPage = (strpos($_SERVER[\'PHP_SELF\'], \'post.php\') || strpos($_SERVER[\'PHP_SELF\'], \'post-new.php\')); // check if we are in the new/edit post page
    // if (is_admin() && $onPostPage && !current_user_can(\'level_10\')) { // check for user capabilities - level_10 is admin
    if (is_admin() && $onPostPage && themename_check_user_role( \'category_restricted\' )) { // check for user role
        $size = count($categories);
        for ($i = 0; $i < $size; $i++) {            
//          if ($categories[$i]->slug != \'category_slug\')
            if ($categories[$i]->term_id != \'1\') // then restrict the categories by ID
                 unset($categories[$i]);
        }
    }

    return $categories;
}
代码的学分为:wptricks. 我只记得我不久前读到过这篇文章。

Later edit:

您可以尝试将角色传递给current_user_can() 函数,但不能保证它正常工作,相反,您可以使用下面的函数检查用户角色。

/**
 * Checks if a particular user has a role. 
 * Returns true if a match was found.
 *
 * @param string $role Role name.
 * @param int $user_id (Optional) The ID of a user. Defaults to the current user.
 * @return bool
 */
function themename_check_user_role( $role, $user_id = null ) {

    if ( is_numeric( $user_id ) )
    $user = get_userdata( $user_id );
    else
        $user = wp_get_current_user();

    if ( empty( $user ) )
    return false;

    return in_array( $role, (array) $user->roles );
}

// example use for the current user
if ( themename_check_user_role( \'customer\' )
    _e( "You\'ve got access!", \'themename\' );
else
    _e( "Sorry, you don\'t have access!", \'themename\' );
作为旁注,最好包括add_role 主题/插件激活功能。

SO网友:jay.jivani

创建名为not\\u allowed\\u user的模板文件。php然后在函数中添加以下代码。php

add_filter(\'template_include\', \'restrict_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 restrict_by_category( $template ) {
  if ( ! is_main_query() ) return $template; // only affect main query.
  $allow = true;
  $private_categories = array(\'cat_1\', \'cat_2\', \'cat_3\'); // categories subscribers cannot see
  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_user.php\';
}
我知道你不想使用插件,但如果你想使用插件,那么这是最好的插件:Restrict Categories

结束

相关推荐

Order posts by condition

我需要得到15个帖子。如果有带标签的featured, 我希望他们是第一个。如果没有,我希望其余的是随机帖子。我的想法是根据条件对帖子进行排序tag=featured 描述和随机。我可以用query_posts()?我的失败尝试:query_posts(\'posts_per_page=15&orderby=((tag=featured),rand)&order=desc\'; 谢谢你。