امین بهشتی

Design Tutorials

طراحی وِب و گرافیک

هدایت کاربران به صفحه خاص بر حسب نقش کاربری آنها در وردپرس

امروزه وردپرس بیشتر به عنوان یک چارچوب برای برنامه‌های کاربردی وِب استفاده می‌شود. در همین راستا، یک سری امور مهم پیش می‌‌آیند که وردپرس آنها را پوشش نمی‌دهد و این برنامه‌نویس می‌باشد که باید امکاناتی به وردپرس اضافه نماید تا نیازها برطرف شوند. به عنوان مثال، آیا واقعاً می‌خواهید کاربران سایت‌تان صفحه wp-admin وردپرس را ببینند؟!

جواب این سوال معمولاً ” نه ” می‌باشد!

در این مطلب روشی را برای شما آموزش خواهم داد که با استفاده از آن بتوانید کاربران سایت را بر حسب نقش کاربری که دارند به صفحه مورد نظر خود هدایت کنید.

گام نخست را با ساختن یک افزونه شروع می‌کنیم. بهتر است که این امکان را به صورت افزونه برای سایت خود مهیا نمایید تا بعدها اگر پوسته سایت خود را عوض کردید به مشکل برخورد نکنید.

در داخل دایرکتوری wp-contents/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://sitehshoma.com/wp-login.php می‌باشد. وقتی که از آن مکان وارد سایت می‌شوید، وردپرس شما را به صفحه پیشخوان می‌برد.

این به معنا می‌باشد که بخش مدیریت وردپرس راه‌اندازی می‌شود و شما احتیاج به یک admin action دارید تا کاربر را شناسایی کنید. از آنجایی که اک‌شِنِ admin_init در زمانی اجرا می‌شود که به اطلاعات کاربر دسترسی پیدا کردیم ولی هنوز کاربر چیزی در پیشخوان خود نمی‌بیند، پس بهتر است به اصطلاح این اک‌شِن را hook  کنیم.

استفاده از اک‌شِنِ admin_init به این معناست که  علاوه بر کاربرانی که قصد ورود به سات‌تان را دارند، کاربران وارد شده به سایت نیز در صورتی که قصد ورود به بخش مدیریت وردپرس را داشته باشند، به صفحه مورد نظرمان هدایت خواهند شد.

خوب اجازه دهید نگاهی به تکه کدمان بیاندازیم. در مثال زیر تمام کاربران با نقش کاربری “مشترک” (subscriber) را هدایت خواهیم کرد ولی می‌توانید بجای آن هر نقش کاربری دیگری که مد نظرتان می‌باشد را وارد نمایید.

/**
 * 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$ ذخیره می‌کنیم.

سپس با دستور if بررسی می‌کنیم که آیا role_name$ با نقش کاربری مد نظر ما تطابق دارد یا خیر. در صورتی که تطابق داشته باشد، با استفاده از دستور wp_redirect کاربر را به صفحه مورد نظرمان هدایت می‌کنیم.

با وجود اینکه تا همین مرحله افزونه کار خود را خواهد کرد، اما باید یک مورد دیگر نیز به آن اضافه کنیم. باید آن را از نظر AJAX امن کنیم.

زمانی که می‌خواهید در وردپرس فراخوانی‌های AJAX انجام دهید، بهتر است همیشه فایل مسیریاب AJAX وردپرس را فراخوانی کنید که داخل بخش مدیریت وردپرس می‌باشد. اگر کدهای‌مان را به همین صورت که در بالا آمده بگذاریم، هر فراخوانی AJAX که با نقش کاربری استفاده شده در کدهای ما انجام شود، رد خواهد شد چون که به شرطی که در کد گذاشتیم برخورد خواهد کرد و هدایت خواهد شد.

برای رفع این مشکل ابتدا باید بررسی کنیم که آیا در حال حاظر فراخوانی AJAX انجام می‌دهیم یا نه، که در صورتی که در حال فراخوانی بودیم، بخش چک کردن و هدایت کاربر انجام نشود.

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' );

و به این صورت به راحتی می‌توانید هر نقش کاربری که خواستید را به هر مکان از سایت‌تان هدایت کنید.

امیدوارم این آموزش به دردتان خورده باشد و استفاده لازم را برده باشید.

منبع : tutsplus.com

درباره امین بهشتی

یک ایرانی ترک زبان که علاقه زیادی به طرّاحی وِب و گرافیک دارد!
در این سایت سعی می‌کنم مطالب جالب، مفید و کاربردی را در جهت آموزش به اشتراک بگذارم!
امیدوارم لحظات خوشی را در سایت سپری نمایید و مطالب سایت مورد استفاده شما قرار بگیرد.
سپاس

  1. من یه چیزو خوب نگرفتم یعنی اگر من ب یکی از کاربران نقشی بدم مثلا مدیر و با توجه به روش شما عمل کنم ب کجا میرود؟ یعنی وقتی وارد شد صفحه مدیریتش کجاست؟ چگونه پست ارسال میکند ممنون میشم پاسخ بدید چون چند ساله اینو میخوام اما هیچ سایتی توضیح نداده

    • سلام،
      ببینید ما در این روش صفحات وردپرس را تغییری نمی‌دیم. ما فقط صفحه‌ای که کاربر بعد از کلیک بر روی ورود (با اطلاعات ورود صحیح) به آن هدایت می‌شود را تنظیم می‌کنیم.

      حالا این صفحه کجاست، بستگی به خودتان دارد که چه صفحه‌ای در نظر گرفته باشید.
      مثلاً شاید خواستید کاربران بعد از ورود به صفحه شناسنامه خود هدایت شوند، یا به یک صفحه خاصی در سایت‌تان که خودتان ساختید هدایت شوند و …

      سپاس

درصورت تمایل برای ارسال دیدگاه‌تان از فرم زیر می‌توانید استفاده کنید ↓

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

(الزامی*)

می‌توانید از نشان و برچسب‌های HTML زیر در متن دیدگاه‌تان استفاده کنید:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
(الزامی*)
(اختیاری)

لطفاً جای‌خالی در معادله زیر را پر کنید: * Time limit is exhausted. Please reload the CAPTCHA.