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
Начебто й корисно, але все одно не дуже розумію сенс такої маніпуляції)
Мда, плагін цікавий, але сирий ппц… таким чином ми не дозволяє зареєстрованим користувачам редагувати профіль та взагалі зайти до адмінки