WordPress блокирует доступ к странице администратора, что у пользователя есть необходимые возможности - PullRequest
0 голосов
/ 27 августа 2018

Я создал пользовательский пост-тип 'новости' с CPTUI . И добавьте роль пользователя «news_manager» с этими возможностями

edit_post
edit_posts
publish_posts
edit_others_posts
edit_published_posts

Затем блокирует доступ к какой-либо странице с помощью remove_menu_page с помощью действия admin_menu

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

1 Ответ

0 голосов
/ 28 августа 2018

Пожалуйста, попробуйте код ниже в вашем файле 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 );
...