Статьи

Перенаправить пользователей на пользовательские страницы по ролям

WordPress все больше используется в качестве основы веб-приложения. С этим вариантом использования приходит множество дополнительных обстоятельств, которые WordPress не охватывает. Вы действительно хотите, чтобы пользователи вашего приложения видели администратора WordPress?

В моем опыте разработки веб-приложений ответ на этот вопрос обычно был «нет».

Сегодня я собираюсь научить вас, как перенаправлять пользователей в зависимости от их роли на пользовательскую страницу в WordPress.


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

Создайте новую папку плагинов в каталоге wp-content / plugins с именем cm-redirect-by-role и добавьте файл cm-redirect-by-role.php . К этому файлу мы добавим базовый заголовок плагина WordPress, показанный ниже.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?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;
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation;
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;
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
GNU General Public License for more details.
 
You should have received a copy of the GNU General Public License
along with this program;
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
// TODO ?>

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


По умолчанию пользователь может войти на ваш сайт WordPress по http://yoursite.com/wp-login.php . Когда вы входите на сайт из этого места, сайт отправляет вас на панель администратора WordPress.

переадресовать-на-ролевой Wp-логин-экран

Это означает, что администратор WordPress запускается, и вам нужно использовать действие администратора, чтобы поймать пользователя. Я всегда подключаю действие admin_init так как оно выполняется достаточно поздно, чтобы вы имели доступ к пользовательским данным, но не настолько поздно, чтобы пользователь увидел что-либо на панели инструментов.

Использование действия admin_init означает, что даже если они уже вошли в систему и попытаются получить доступ к администратору WordPress, они все равно будут перенаправлены.

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
/**
 * 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 в WordPress вы всегда должны вызывать файл маршрутизации WordPress AJAX, который находится внутри администратора WordPress. Если мы оставим наш код таким, какой он есть, любой вызов AJAX, выполненный нашими соответствующими ролями, потерпит неудачу, так как он будет соответствовать нашему условию и будет перенаправлен.

Чтобы это исправить, нам нужно проверить, выполняем ли мы в настоящее время вызов AJAX, и если это так, пропустить проверку роли.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
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 в DOING_AJAX константы DOING_AJAX . Если это определено, мы выполняем вызов AJAX и хотим пропустить код перенаправления.


Вот и все, теперь мы можем перенаправлять пользователей в зависимости от их роли в выбранное нами место. Мы могли бы даже перенаправить пользователей с разными ролями на разные страницы, если бы захотели.

Все, что нам нужно сделать, это добавить второе условие, соответствующее второй роли, и указать место, куда мы хотим перенаправить.