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

هر روز وردپرس ، به عنوان یک چارچوب برنامه وب مورد استفاده قرار می گیرد. با این همه ، شرایط خاصی وجود دارد که وردپرس آن ها را نمیتواند پوشش دهد. واقعا آیا دوست دارید که کاربران تان، قسمت مدیریت وردپرس را ببینند ؟
پاسخ به این سوال با توجه به تجربه من در زمینه توسعه ی وب ” نه” است.
امروز قصد آموزش این را داریم که چگونه بر اساس نقش یک کاربر مسیر او را در وردپرس به یک صفحه سفارشی تغییر دهیم. این مقاله با سایر مقالات ما کمی متفاوت است زیرا در این جا می خواهیم در واقع یک پلاگین تولید کنیم.

آموزش راه اندازی تنظیمات تغییر مسیر کاربر بر اساس وظیفه آن ها به صفحه سفارشی

با ساختن یک افزونه این کار را شروع می کنیم. در یک پلاگین شما می بایست این کار را انجام دهید. چون این کار شبیه این می باشد که طراحی قالب تان را تغییر دهید و باز هم خواهان تغییر قابلیت در آن باشید. این را می دانید که در طراحی کنونی تم هر گونه عملکردی را جای دهید، آن را باید در یک پلاگین انجام دهید.
در فهرست 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 of infu.ir; 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.

*/
// 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 در وردپرس، همواره باید فایل های مسیریاب 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 آماده شده است ، در اختیار داریم.

سخن پایانی

تمام کاری که می بایست انجام بدهیم همین بود. هم اکنون می توانیم بر اساس نقش کاربران مسیرشان را به محل های سفارشی در نظر گرفته شده تغییر دهیم. همچنین می توانیم مسیر کاربرها با نقش های متفاوت را به صفحه های گوناگون تغییر دهیم.

همه کاری که ما باید انجام بدهیم این است که شرط دومی برای تطابق با نقش دوم اضافه کنیم و جایی را که می خواهیم کاربر را به آنجا هدایت کنیم، تعیین کنیم

مطالب مرتبط

دیدگاهتان را بنویسید

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