Как определенным группам пользователей закрыть доступ к конкретным страницам админки WordPress?

Полгода назад я писал статью о том, как полностью закрыть доступ в админку WordPress, теперь я покажу, как блокировать конкретные страницы.

Рассмотрим тут два варианта — перенаправление на другую страницу и вывод стандартного вордпрессовского сообщения об ошибке.

Редирект на другую страницу

Если у пользователя будет недостаточно прав для доступа к странице, его просто будет перекидывать в консоль (на главную) админ-панели.

function true_block_admin_pages_redirect() {
    global $pagenow;
    // тут перечисляем в массиве страницы, которые хотим скрыть, я например закрыл весь раздел меню "Плагины"
    $pages_to_block = array(
        'plugins.php',
        'plugin-install.php',
        'plugin-editor.php'
    );
    if(in_array($pagenow, $pages_to_block)){
        // указываем URL, на который будем перенаправлять тех, у кого нет доступа, в данном случае - главная страница админки
        wp_redirect( admin_url('/') );
        exit;
    }
}
 
// в этом условии необходимо перечислить права, которые необходимо иметь пользователю, чтобы получить доступ
// удалите условие, если нужно закрыть страницы для всех
if(!current_user_can('administrator')){
    add_action('admin_init', 'true_block_admin_pages_redirect');
}

Вы также можете не просто закрыть доступ к каким-то конкретным страницам в админке, но и
удалить из меню пункты, соответствующие им.

Вывод сообщения об ошибке

Вместо того, чтобы просто редиректить непонимающего пользователя на другую страницу, можно вывести определенное сообщение, объясняющее что к чему.

сообщение об ошибке доступа

В этом примере я полностью (для администраторов тоже) блокирую доступ к странице с комментами:

function true_block_admin_pages_error() {
    global $pagenow;
    $pages_to_block = array(
        'edit-comments.php'
    );
    if(in_array($pagenow, $pages_to_block)){
        // внутри скобок, в кавычках, указываем своё сообщение, HTML поддерживается
        wp_die('Прости, доступ к этой странице для тебя закрыт. <a href="' .admin_url('/'). '">Вернуться в админку.</a>');
        exit;
    }
}
 
add_action('admin_init', 'true_block_admin_pages_error');

Весь код нужно вставлять в functions.php вашей темы.

Источник: misha.blog

Миша Рудрастых

Путешествует по миру и рассказывает всем о WordPress лично, у себя в блогах и на курсах в Санкт-Петербурге. Умеет просто объяснять сложные вещи, делает это красиво. Организовывает неплохие WordCamp's, но совсем не умеет слушать чужие доклады.

Добавить комментарий

%d такие блоггеры, как: