WordPress всё чаще используется как фреймворк для веб-приложений. Как помочь пользователям движка WordPress воспользоваться конкретными страницами и опциями сайта в зависимости от того, какая роль присвоена конкретному пользователю?
Давайте разберемся в особенностях настройки и перенаправления групп пользователей на сайт.
Проводим настройку
Начнем с того, что создадим отдельный плагин. Дело в том, что в дальнейшем вы наверняка захотите редактировать внешний вид сайта, использовать разные темы оформления и т.д. Вся функциональность наша слетит, если не оформить ее в отдельный плагин.
Создаем папку для плагина в wp-content/plugins под названием cm-redirect-by-role и добавляем в нее файл cm-redirect-by-role.php. В этом файле будет следующий код:
<?php /* Plugin Name: Redirect Users by Role Plugin URI: Description: Redirects users based on their role Version: 1.0 Author: SFNdesign, Curtis McHale Author URI: http://sfndesign.ca License: GPLv2 or later */ /* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ // TODO ?>
Описание плагина готово. Давайте посмотрим теперь, как работает авторизация пользователей.
Делаем авторизацию пользователей
По умолчанию адрес для авторизации пользователей вашего сайта выглядит как http://yoursite.com/wp-login.php. С этого адреса и происходит перенаправление на страницу с панелью администрирования.
Для запуска Консоли нужна процедура перехвата введенных данных от пользователя для последующего перенаправления. Обычно эта процедура привязана к admin_init и запускается так, чтобы сам пользователь ничего не успел увидеть.
Использование admin_init дает вам гарантированный редирект на определенный тип страниц после ввода логина и пароля.
Давайте взглянем на используемый код. Для примера предположим, что мы хотим перенаправлять всех подписчиков после авторизации.
/** * Redirects users based on their role * * @since 1.0 * @author SFNdesign, Curtis McHale * * @uses wp_get_current_user() Returns a WP_User object for the current user * @uses wp_redirect() Redirects the user to the specified URL */ function cm_redirect_users_by_role() { $current_user = wp_get_current_user(); $role_name = $current_user->roles[0]; if ( 'subscriber' === $role_name ) { wp_redirect( 'http://yoursite.com/dashboard' ); } // if } // cm_redirect_users_by_role add_action( 'admin_init', 'cm_redirect_users_by_role' );
Процесс начинается с получения данных от wp_get_current_user(). Там задается роль пользователя, и ей назначается своя переменная с атрибутом $role_name.
Перепроверяем, совпадает ли $role_name с той ролью, которая есть у перенаправляемого пользователя. Если совпадает, тогда используем wp_redirect для перенаправления конкретного пользователя на ту страницу, которая отведена его роли на сайте. Процедура работает, но кое-что надо добавить.
Настраиваем безопасность AJAX
Создание вызова AJAX в WordPress всегда связано с вызовом маршрутного файла AJAX в панели управления WordPress. Нам нужно внести некоторые правки в этот код, чтобы не было конфликтов в процедурах при перенаправлении. Вот что надо поправить:
function cm_redirect_users_by_role() { if ( ! defined( 'DOING_AJAX' ) ) { $current_user = wp_get_current_user(); $role_name = $current_user->roles[0]; if ( 'subscriber' === $role_name ) { wp_redirect( 'http://yoursite.com/dashboard' ); } // if $role_name } // if DOING_AJAX } // cm_redirect_users_by_role add_action( 'admin_init', 'cm_redirect_users_by_role' );
Теперь функция перенаправления заключена в константу DOING_AJAX. И при определении правильной процедуры будет происходить перенаправление.
Заключение
Вот и всё, что надо было сделать, чтобы корректно перенаправлять пользователей на различные страницы в зависимости от их ролей после авторизации на сайте. Для этого мы указали как ряд основных параметров, так и дополнительные условные критерии.
Комментарии к записи: 2
Вроде и полезно, но все равно не очень понимаю смысл такой манипуляции)
Мда, плагин интересный, но сырой ппц… таким образом мы не позволяет зарегистрированным пользователям редактировать профиль и вообще зайти в админку