【问题标题】:WordPress block access to admin page said user have exactly needed capabilityWordPress阻止访问管理页面表示用户具有完全需要的功能
【发布时间】:2019-02-02 09:53:16
【问题描述】:

我使用CPTUI 创建了“新闻”自定义帖子类型。 并添加具有这些功能的“news_manager”用户角色

edit_post
edit_posts
publish_posts
edit_others_posts
edit_published_posts

然后基本上通过 admin_menu 操作使用 remove_menu_page 阻止对某些页面的访问

remove_menu_page( 'index.php' );
remove_menu_page( 'edit.php?post_type=blog' );

然后将角色重定向到 'edit.php?post_type=news'

function loginRedirect( $redirect_to, $request, $user ){
  if ( current_user_can( 'news_manager' ) ) {
    return "/wp-admin/edit.php?post_type=news";
  }
  return $redirect_to;
}
add_filter("login_redirect", "loginRedirect", 50, 3);

但是当我创建了一个 news_manager 用户并使用它登录时。 URL 重定向是正确的。但是被屏蔽了,wordpress 说这些

您没有足够的权限访问此管理页面。

原因:当前用户具有“edit_posts”功能,即 需要访问“新闻→所有新闻”菜单项。

这些仅在 edit.php 页面上被阻止。如果访问特定帖子,则通过。 '/wp-admin/post.php?post=22&action=edit' 例如

据说用户可以查看但阻止访问。为什么?以及如何解决这些问题。

版本

  • Wordpress 4.9.4
  • 自定义帖子类型 UI 1.5.6

【问题讨论】:

    标签: wordpress custom-post-type capability


    【解决方案1】:

    请在当前主题的function.php文件中尝试下面的代码

    function add_blog_role_caps() {
    
       $roles = array('news_manager');
    
       foreach($roles as $the_role) {
    
          $role = get_role($the_role);
          $role->add_cap( 'read_news');
          $role->add_cap( 'edit_news' );
          $role->add_cap( 'edit_others_news' );
          $role->add_cap( 'edit_published_news' );
          $role->add_cap( 'publish_news' );
          $role->add_cap( 'delete_others_news' );
          $role->add_cap( 'delete_private_news' );
          $role->add_cap( 'delete_published_news' );
    
       }
    }
    add_action('admin_init', 'add_blog_role_caps', 5 );
    

    【讨论】:

      猜你喜欢
      • 2016-09-19
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2016-04-11
      相关资源
      最近更新 更多