یکی از جنبههای کلیدی در طراحی تجربه کاربری (UX) و مدیریت وبسایت، ساده سازی دسترسی به صفحات مهمتر و پنلهای مدیریتیست. در این مطرح، باید اطمینان یافت که هر کاربر پس از ورود، به صفحهای هدایت شود که بیشترین ارتباط را با نیازها و سطح دسترسی او دارد. این امر نه تنها به افزایش کارایی کمک میکند، بلکه حس شخصیسازی و توجه به جزئیات را نیز به کاربر منتقل مینماید. در این پست، به بررسی یک قطعه کد کابردی برای وردپرس میپردازیم که به شما امکان میدهد تا هدایت کاربران پس از ورود را بر اساس نقشهای تعریف شده در سیستم خود، به صورت پویا و هوشمندانه انجام دهید.
چرا هدایت بر اساس نقش اهمیت دارد؟
تصور کنید یک پلتفرم آموزشی دارید. یک دانشجو (با نقش ‘subscriber’) نیاز دارد به داشبورد شخصی خود برای مشاهده دروس و پیشرفت تحصیلیاش دسترسی پیدا کند، در حالی که یک مدرس (با نقش ‘editor’) باید به پنل مدیریت محتوا، امکان ویرایش دروس و مشاهده آمار دانشجویان دسترسی داشته باشد. هدایت خودکار این کاربران به صفحات مربوطه، تجربه کاربری را به طور چشمگیری بهبود میبخشد و از سردرگمی یا نیاز به جستجوی دستی جلوگیری میکند.
تحلیل قطعه کد
بیایید نگاهی دقیقتر به کد ارائه شده بیندازیم:
add_filter('login_redirect', function($r,$req,$user){
if(in_array('subscriber', (array) $user->roles)) return '/panel-user/';
if(in_array('editor', (array) $user->roles)) return '/dashboard-editor/';
return admin_url();
},۱۰,۳);
این کد از فیلتر login_redirect استفاده میکند که در وردپرس پس از موفقیتآمیز بودن ورود کاربر فعال میشود.
add_filter('login_redirect', function($r,$req,$user){ ... },10,3);: این خط، یک تابع ناشناس (anonymous function) را به فیلترlogin_redirectمتصل میکند. پارامترهای۱۰و۳به ترتیب اولویت اجرا و تعداد آرگومانهای دریافتی تابع را مشخص میکنند.function($r,$req,$user): این تابع سه آرگومان دریافت میکند:$r: آدرس پیشفرض هدایت پس از ورود (که شما آن را بازنویسی خواهید کرد).$req: اطلاعات درخواست ورود.$user: شیء کاربر فعلی که وارد سیستم شده است و شامل اطلاعاتی مانند نقش او / سطح دسترسی او ($user->roles) است.if(in_array('subscriber',$user->roles)) return '/panel-user/';: این شرط بررسی میکند که آیا نقش کاربر ‘subscriber’ (مشترک) است یا خیر. اگر نقش کاربر مشترک باشد، کاربر به مسیر/panel-user/هدایت میشود.if(in_array('editor',$user->roles)) return '/dashboard-editor/';: در صورت عدم تطابق با شرط قبلی، این شرط بررسی میکند که آیا نقش کاربر ‘editor’ (ویراستار) است یا خیر. اگر نقش کاربر ویراستار باشد، کاربر به مسیر/dashboard-editor/هدایت میشود.return admin_url();: اگر هیچکدام از شرایط بالا برقرار نباشد (یعنی کاربر نه ‘subscriber’ است و نه ‘editor’)، به صورت پیشفرض به صفحه مدیریت وردپرس (admin_url()) هدایت خواهد شد.
نحوه پیادهسازی
این کد را پس از اصلاح براساس نیازهای خود باید در انتهای فایل functions.php قالب وردپرس خود قرار دهید.
مزایای استفاده از این روش
- بهبود تجربه کاربری: هدایت مستقیم به صفحات مرتبط
- بهبود امنیت: جلوگیری از دسترسی کاربران عادی به بخشهای مدیریتی
- انعطافپذیری بالا: قابلیت تعریف مسیرهای دلخواه برای هر نقش
- کدنویسی تمیز: استفاده از مکانیزم فیلتر وردپرس به جای دستکاری هسته
- عدم استفاده از پلاگین
دیگر نکات
- شما میتوانید به همین ترتیب برای نقشهای دیگر (مانند Administrator, Author, Contributor و …) نیز شرایط اضافه کنید.
- مسیرهای هدایت میتوانند URLهای کامل یا مسیرهای نسبی باشند.
- همیشه قبل از اعمال تغییرات در فایل
functions.php، از آن نسخه پشتیبان تهیه کنید.