用户功能仅限于在wordpress中访问特定页面

时间:2016-03-15 05:04:02

标签: php wordpress

我想在wordpress中创建一个用户,只能访问wordpress中的几个页面而不是其他任何东西,这个用户可以编辑,删除,更新和创建任何东西或者切换允许他只能访问任何页面的页面在wordpress中的其他东西,我尝试了很多插件,如: UAM用户访问管理器 按许可证核心 角色scoper 但他们不是根据我的需要或可能是我没有很好地使用它们。任何帮助,将不胜感激。我也试图通过后端的代码创建用户,但无法正确完成它请尽快提供任何相关的帮助: 我通过这个创造了角色:

$result = add_role(
    'basic_contributor',
    __( 'Basic Contributor' ),
    array(
        'read'         => true,  // true allows this capability
        'edit_posts'   => true,
        'delete_posts' => false, // Use false to explicitly deny
    )
);
if ( null !== $result ) {
    echo 'Yay! New role created!';
}
else {
    echo 'Oh... the basic_contributor role already exists.';
}

..............

function add_roles_on_plugin_activation() {
       add_role( 'custom_role', 'Custom Subscriber', array( 'read' => true, 'level_0' => true ) );
   }
   register_activation_hook( __FILE__, 'add_roles_on_plugin_activation' );

但它对我帮助不大..

2 个答案:

答案 0 :(得分:0)

我刚刚安装并试用了这个插件:https://wordpress.org/plugins/advanced-access-manager/。它应该为你做的伎俩。但是,如果你需要高级的东西,你可能需要付出一些代价。

在此插件中,转到“设置”(AAM),然后在“用户角色”区域中,按下要编辑的角色旁边的齿轮。然后导航到右侧的帖子或页面,再次按下齿轮图标并设置所需的权限。

如果您对自定义代码感兴趣,如果您不想使用插件,我可以提供一些方法 - 只需告诉我,我就可以详细说明如何操作。

编辑:这里有一些你可以放在page.php或single.php上的代码

在循环内部,仅限管理员,执行:

<?php 
   // First, specify only to check for permissions on certain pages/posts by ID
   if(is_page(1,2,3)||is_post(4,5,2)) {
      if(current_user_can( 'manage_options' )) { ?>
        <!-- Here, all the the_title(), the_content(), etc should go -->
        <h1><?php the_title(); ?></h1>
<?php } else { 
        echo 'Sorry, you don't have permission to view this page.'
      } 
   } else { ?>
  <!-- Display everything as normal -->
      <h1><?php the_title(); ?></h1>
<?php } ?>

如果您要测试非管理员,请尝试'moderate_comments'代表编辑,'publish_posts'代表作者,'edit_posts'代表贡献者,'read'代表订阅者(这会进入current_user_can()函数)。请参阅https://codex.wordpress.org/Roles_and_Capabilities

答案 1 :(得分:0)

正如您在评论中所说,您希望禁用或限制特定帖子由您指定的某些用户访问。

这与用户功能无关,因为用户功能要么让用户看到wp-admin中的菜单,

要隐藏默认帖子类型的某些记录,您可以使用此方法:

  1. 创建一个ACF多选框,其中包含用户列表(至 您要隐藏或提供访问权限,
  2. 通过访问这些页面选择您要阻止的用户。
  3. 现在保存此帖子还会将用户ID列表保存为该页面的元数据。
  4. 现在通过钩子,您可以检查当前登录的用户     ID是相同的,如果他来到那个页面,那么你可以传递一个消息。
  5. 喜欢下面的钩子:
  6.   

    这需要粘贴在functions.php页面

    function id_WPSE_114111() {
    
        global $my_admin_page;
        $screen = get_current_screen();
        global $post;
        $id = $post->ID;
    
        $user_id = get_current_user_id();
    
        $blocked_users = get_field('blocked_users',$id);
        //try to print $blocked_users here and get only the IDs of users in an array like below
        foreach ($blocked_users as $b_key=>$b_val){
        //check how to get ID by printing the $blocked_users above
        $blocked_users[] = $b_val->ID;
        }
    
        //assuming that blocked users is an array of IDs
        /*
        $blocked_users = array(1,2,3,4);
        */
    
        //then
        if(in_array($user_id,$blocked_users)){
            echo 'Not accessible !!'
            return;
        }
    
    }
    
    add_action( 'admin_notices', 'id_WPSE_114111' );
    

    ACF字段设置

    1. 您可以从此处http://wordpress.org/plugins/advanced-custom-fields/
    2. 下载ACF插件
    3. 安装后,您会在wp-admin中找到“自定义字段”
    4. 的选项
    5. 点击下面的添加新并创建ACF组,为其提供标题为用户检查。
    6. 点击蓝色添加字段按钮,然后提供字段标签,字段名称,在字段类型中选择用户,传递说明,查看图像以获取更多选项
    7. 现在,如果在字段类型中选择了用户,那么当您在检查时获取此字段时,您将获得一个用户对象列表
    8. 在位置标签下方选择要显示此字段的帖子类型,我选择了2:“发布”和“页面”,您可以点击添加规则组并添加更多内容更多帖子类型。 (随附屏幕截图)
    9. enter image description here