تابع add_role در وردپرس
تابع add_role() یکی از توابع پایهای وردپرس برای ایجاد نقشهای (roles) سفارشی در سیستم کاربری است. با استفاده از این تابع میتوانید نقشهای جدید با مجموعهای از قابلیتها (capabilities) تعریف کنید و مجوزهای دسترسی کاربران را دقیقتر مدیریت نمایید. در این مقاله بهصورت عملی و دقیق با نحوهی استفاده، مثالهای کاربردی، نکات امنیتی و بهترین روشها آشنا میشوید.
تعریف کوتاه و پارامترها
تابع add_role() سه پارامتر میپذیرد:
- role (string): شناسه یکتا نقش، معمولاً به حروف کوچک و بدون فاصله.
- display_name (string): نام قابل نمایش نقش، برای نمایش در رابط کاربری.
- capabilities (array): آرایهای از قابلیتها با مقدار true/false.
| پارامتر | توضیح |
|---|---|
| role | شناسه یکتا مثل “content_manager” |
| display_name | نام قابل خواندن مثل “Content Manager” |
| capabilities | آرایهای مانند [‘edit_posts’ => true] |
نمونه ساده: ایجاد یک نقش جدید
add_role(
'content_manager',
'Content Manager',
array(
'read' => true,
'edit_posts' => true,
'delete_posts' => false,
'upload_files' => true
)
);این قطعه کد نقش content_manager را با چند قابلیت پایه میسازد. توجه کنید که مقدار true یا false برای هر capability تعیینکنندهی مجوز است.
بهترین روش برای ثبت نقش: استفاده از activation hook
اضافه کردن نقش در هر بار بارگذاری سایت (init) باعث اجرای مجدد و احتمالاً تداخل میشود. بهترین روش این است که هنگام فعالسازی افزونه یا هنگام تعویض پوسته نقشها را ثبت کنید.
function myplugin_activate() {
if ( null === get_role('content_manager') ) {
add_role(
'content_manager',
'Content Manager',
array(
'read' => true,
'edit_posts' => true,
'publish_posts' => true,
'upload_files' => true
)
);
}
}
register_activation_hook( __FILE__, 'myplugin_activate' );
function myplugin_deactivate() {
remove_role('content_manager');
}
register_deactivation_hook( __FILE__, 'myplugin_deactivate' );در این مثال ابتدا بررسی میکنیم آیا نقش وجود دارد یا خیر تا از ایجاد دوباره جلوگیری شود. سپس هنگام غیرفعالسازی افزونه نقش حذف میشود. این روش از ایجاد نقشهای تکراری یا باقی ماندن نقشهای غیرضروری جلوگیری میکند.
تفاوت add_role() و add_cap()
- add_role(): نقش جدید با مجموعهای از capabilityها ایجاد میکند.
- add_cap(): به یک نقش موجود capability اضافه میکند یا آن را حذف میکند (با remove_cap).
// افزودن capability به نقش موجود
$role = get_role('editor');
if ( $role ) {
$role->add_cap('manage_special_content');
}در مثال بالا از get_role() برای گرفتن شی نقش استفاده شده و سپس capability جدیدی افزوده میشود. این روش مناسب زمانی است که میخواهید نقشهای پیشفرض را گسترش دهید بدون حذف یا بازتعریف کامل نقش.
همپوشانی با قابلیتهای متا (Meta Caps)
برخی از قابلیتها مانند edit_post یا delete_post متا-قابلیت هستند؛ یعنی وردپرس آنها را به قابلیتهای واقعی مانند edit_others_posts، edit_published_posts و غیره نگاشت میکند. هنگام تعریف capabilities سفارشی این نکته را در نظر بگیرید تا رفتار مورد انتظار برای ویرایش و انتشار محتوا حفظ شود.
نمونه پیشرفته: نقش برای مدیریت تبلیغات یا پروموشن
add_role(
'promotion_manager',
'Promotion Manager',
array(
'read' => true,
'edit_posts' => true,
'publish_promotions' => true, // capability سفارشی
'edit_promotions' => true,
'delete_promotions' => false
)
);در این سناریو capabilityهای اختصاصی مثل publish_promotions برای نوع پست سفارشی (custom post type) یا منطق اختصاصی افزونه تعریف شدهاند. توصیه میشود نام capabilityها را با پیشوند افزونه/سایت خود شروع کنید تا از برخورد اسمی جلوگیری شود (مثلاً myplugin_publish_promotions).
قابلتها و امنیت
- هیچگاه capabilityهای مدیریتی مثل ‘manage_options’ را به نقشهای غیرقابل اعتماد ندهید.
- برای نامهای capability از پیشوند استفاده کنید تا تداخل با سایر افزونهها کاهش یابد.
- برای تست، از یک کاربر تستی با نقش جدید استفاده کنید و همه مسیرهای مدیریتی را بررسی کنید.
نکات عملی و خطایابی
- گزینه get_role() برای بررسی وجود نقش استفاده شود تا add_role دوباره اجرا نشود.
- دادههای نقش در دیتابیس (جدول wp_options یا usermeta برای capabilities کاربران) ذخیره میشود؛ حذف دستی در دیتابیس میتواند باعث عدم انسجام شود، از remove_role استفاده کنید.
- اگر نقش ایجاد شد ولی تغییراتی اعمال نمیشود، کش یا object cache را چک کنید.
نتیجهگیری و کاربردهای رایج
add_role() ابزار ساده و پرقدرتی برای تعریف نقشهای سفارشی در وردپرس است. از آن میتوان در موارد زیر استفاده کرد:
- تعریف نقشهای تخصصی برای تیم محتوا (مثلاً Content Manager، SEO Editor).
- ایجاد نقشهای مرتبط با انتقال امور مانند نقشهای فروش یا پشتیبانی در یک فروشگاه آنلاین.
- افزودن نقشهای محدود برای مدیریت نوع پست سفارشی در افزونهها.
با رعایت بهترین روشها (ثبت هنگام activation، استفاده از پیشوند در capabilityها، بررسی وجود نقش قبل از ایجاد) میتوانید نقشهای دقیق، امن و سازگار با دیگر افزونهها ایجاد کنید.
آیا این مطلب برای شما مفید بود ؟




