7 days of WordPress plugins, themes & templates - for free!* Unlimited asset downloads! Start 7-Day Free Trial
Advertisement
  1. Code
  2. Creative Coding

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

Scroll to top
Read Time: 5 mins

Persian (پارسی) translation by Amin Beheshti (you can also view the original English article)

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

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

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

تنظیم‌های اولیه

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

در داخل دایرکتوری wp-contents/plugins یک پوشه با نام “cm-redirect-by-role” ایجاد کنید و داخل این پوشه یک فایل با نام cm-redirect-by-role.php ایجاد کنید. داخل این فایل، ابتدا اطلاعات پایه‌ای که در قسمت هدر افزونه‌ها باید باشند را وارد می‌کنیم.

حال که افزونه راه افتاد، بگزارید نگاهی به چگونگی ورود کاربر بیاندازیم.

روند ورود کاربر

مکان پیش‌فرضی که کاربر می‌تواند از طریق آن وارد سایت ورپرسی شما شود، http://sitehshoma.com/wp-login.php می‌باشد. وقتی که از آن مکان وارد سایت می‌شوید، وردپرس شما را به صفحه پیشخوان می‌برد.

redirect-by-role-wp-login-screenredirect-by-role-wp-login-screenredirect-by-role-wp-login-screen

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

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

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

این پروسه را با دریافت اطلاعات کاربر کنونی شروع می‌کنیم که برای این کار از دستور wp_get_current_user() استفاده کردیم. با استفاده از آن نام نقش کاربریِ کاربر کنونی را در متغیر $role_name ذخیره می‌کنیم.

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

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

ایمن سازی AJAX

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

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

اکنون تابع هدایت‌گر ما داخل یک شرط قرار گرفته است و این شرط وجود ثابت DOING_AJAX را بررسی می‌کند و در صورت موجود بودن آن، به این معنی است که ما در حال فراخوانی یک درخواست AJAX هستیم و بنابراین کدهای هدایت شدن کاربر اجرا نمی‌شوند.

نتیجه گیری

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

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

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.