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. И при определении правильной процедуры будет происходить перенаправление.

Заключение

Вот и всё, что надо было сделать, чтобы корректно перенаправлять пользователей на различные страницы в зависимости от их ролей после авторизации на сайте. Для этого мы указали как ряд основных параметров, так и дополнительные условные критерии.

Источник: wp.tutsplus.com

Вам понравился материал?

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

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Вы ввели некорректные логин или пароль

Извините, для комментирования необходимо войти.

2 комментария

сначала новые
по рейтингу сначала новые по хронологии

Мда, плагин интересный, но сырой ппц... таким образом мы не позволяет зарегистрированным пользователям редактировать профиль и вообще зайти в админку

Вроде и полезно, но все равно не очень понимаю смысл такой манипуляции)