04144235034
امروزه وردپرس بیشتر به عنوان یک چارچوب برای برنامههای کاربردی وِب استفاده میشود. در همین راستا، یک سری امور مهم پیش میآیند که وردپرس آنها را پوشش نمیدهد و این برنامهنویس میباشد که باید امکاناتی به وردپرس اضافه نماید تا نیازها برطرف شوند. به عنوان مثال، آیا واقعاً میخواهید کاربران سایتتان صفحه مدیریت وردپرس را ببینند؟!
جواب این سوال معمولاً ” نه ” میباشد!
در این مطلب روشی را برای شما آموزش خواهم داد که با استفاده از آن بتوانید کاربران سایت را بر حسب نقش کاربری که دارند به صفحه مورد نظر خود هدایت کنید.
گام نخست را با ساختن یک افزونه شروع میکنیم. بهتر است که این امکان را به صورت افزونه برای سایت خود مهیا نمایید تا بعدها اگر پوسته سایت خود را عوض کردید به مشکل برخورد نکنید.
در داخل دایرکتوری 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' );
اکنون تابع هدایتگر ما داخل یک شرط قرار گرفته است و این شرط وجود ثابت DOING_AJAX
را بررسی میکند و در صورت موجود بودن آن، به این معنی است که ما در حال فراخوانی یک درخواست AJAX هستیم و بنابراین کدهای هدایت شدن کاربر اجرا نمیشوند.
و به این صورت ما میتوانیم کاربران را بر حسب نقش کاربری که دارند به صفحه مورد نظرمان هدایت کنیم. در صورت نیاز حتی میتوانیم کاربرانی با نقشهای کاربری مختلف را به صفحات مختلفی هدایت کنیم.
برای انجام این کار تنها لازم است که یک شرط دوم که با نقش دوم تطبیق پیدا کند اضافه کنیم و سپس مقصد مورد نظر برای آن کاربر را تنظیم کنیم.