Більше результатів...

Загальні селектори
Тільки точні збіги
Шукати у заголовках
Шукати у контенті
Вибір типів постів
Фільтрувати за категоріями
FAQ
Hostenko
Натхнення
Відео уроки
Новини
Плагіни
теми
Уроки
Хакі

WordPress все частіше використовується як фреймворк для веб-застосунків. Як допомогти користувачам движка WordPress скористатися конкретними сторінками та опціями сайту в залежності від того, яка роль присвоєна конкретному користувачеві?

Давайте розберемося в особливостях налаштування та перенаправлення груп користувачів на сайт.

inet.ws - Powerful VPS Hosting в США, Canada, UK та DE!

Проводимо налаштування

Почнемо з того, що створимо окрему плагін. Справа в тому, що надалі ви, напевно, захочете редагувати зовнішній вигляд сайту, використовувати різні теми оформлення і т.д. Вся функціональність наша злетить, якщо не оформити її в окрему плагін.

Створюємо папку для плагіна в 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. З цієї адреси відбувається перенаправлення на сторінку з панеллю адміністрування.

Перенаправлення на цю сторінку в залежності від ролі користувача WordPress

Для запуску Консолі потрібна процедура перехоплення введених даних від користувача для подальшого перенаправлення. Зазвичай ця процедура прив'язана до 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
inet.ws - Powerful VPS Hosting в США, Canada, UK та DE!
Олексій Шевченко
редактор wpcafe
Вивчає сайтобудування з 2008 року. Практикуючий вебмайстер, який спеціалізується на створенні сайтів на WordPress. Задати питання Олексію можна на https://profiles.wordpress.org/wpthemeus/

Коментарі до запису: 2

Степан:

Начебто й корисно, але все одно не дуже розумію сенс такої маніпуляції)

Шаак:

Мда, плагін цікавий, але сирий ппц… таким чином ми не дозволяє зареєстрованим користувачам редагувати профіль та взагалі зайти до адмінки

Додати коментар або відгук