در حال حاضر برای مدتی است که نقش ها بخشی جدایی ناپذیر از وردپرس شده اند. بسیاری از توابع مرتبط با مدیریت آنها از نسخه ی ۲٫۰٫۰ مورد استفاده بوده است. با وجود داشتن قدمت طولانی اما آنها به ندرت مورد استفاده قرار گرفته اند و این امر از آنجایی که آنها اجازه ی نصب آسان را به انواع کاربرهای سفارشی می دهند، شرم آور است (و همچنین توانایی مدیریت میکرو هم دارند). شما در این مقاله همه چیز را که درباره ی استفاده از نقش کاربر در وردپرس و استفاده بهینه از این قابلیت باور نکردنی ساخته شده، یاد می گیرید.
واژگان
اصلیترین اصطلاحاتی که باید بدانید “نقش” و “قابلیت” هستند. قابلیت ها هسته سیستم هستند، آنها همه ی کارهایی که شما می توانید انجام دهید را نشان می دهند. یک مثال از این قابلیتها switch_themes است. کاربری که دارای این قابلیت است قادر به تغییر ظاهر وب سایت با استفاده از بخش Appearances در مدیر سایت (admin) است. کسانی که این قابلیت را ندارد قادر به انجام این کار نخواهند بود.
نقشها به سادگی یک مجموعه نام گذاری شده از قابلیت ها هستند. تصور کنید که شما دارای قابلیت هایی مانند edit_post، add_user و غیره هستید. به جای قرار دادن همه ۵۰ تای آنها برای هر کاربری که شما می خواهید یک admin باشد، می توانید به سادگی برای هر کاربر نقش admin تعریف کنید و سپس تمام قابلیتهارا به آن نقشها اضافه کنید.
راه اندازی پیش فرض (Default)
به طور پیش فرض، وردپرس دارای شش نقش و حدود ۵۷ قابلیت است. هر نقش دارای ترکیب متفاوتی از قابلیت ها است که به هر کاربرحقوق و امتیازات مناسبی اعطا می کند.
به عنوان مثال، یک شرکت کننده می تواند پیام های خود را ویرایش و حذف نماید، اما نمی تواند زمانی را که این پستها منتشرمیشوند، کنترل کند (و زمانی که آنها منتشر شوند دیگر نمی توانید آن را حذف کند). این امر به این دلیل است که آنها قابلیت های edit_posts و delete_posts را دارند اما قابلیت های publish_post و delete_published_post را ندارد.
بر روی راه اندازی پیش فرض (default setup) ارائه شده توسط وردپرس، به خوبی فکر شده است و نباید اصلاح شودو فقط باید اضافه شود. اگر آن تغییری ایجاد کنید، ممکن است بعدها با مشکلات دشوار روبرو شوید:مشکلاتی مانند این که یکی از مشترکها قادر به حذف پست از وب سایت شما باشد، و یا ادمینی که قادر به تغییر تم ها نباشد.
چه مواقعی نقش های جدید و قابلیت ها مورد نیاز میباشند
معمولا نقش های جدید با قابلیت های جدید پشت سر هم می آیند. معمولا اول ما مجموعه ای از قابلیت های جدید که توسط ادمین کنترل می شوند را ایجاد می کنیم (و همچنین یک نقش جدید). اجازه دهید با یک مثال ببینیم:
اگر شما یک وب سایت بزرگ دارید، این احتمال وجود دارد که شما یک تیم بازاریابی دارید. این تیم نیازی به داشتن قابلیت ویرایش و انتشار ندارد، اما آنها نیاز به دسترسی به آمار های تبلیغاتی، روند به موضوعات جستجو، و غیره را دارند. شاید دادن اجازه به آنها برای مدیریت دسته ها و نظرات برای مقاصد SEO و رضایت مشتری، سودمند باشد.
اولین کار ما این است که وضعیت تبلیغات و روند جستجو را زیر نظر داشته باشیم. این چیزی نیست که وردپرس به طور پیش فرض ارائه می دهد ، بنابراین اجازه دهید فرض کنیم که این امر به عنوان یک پلاگین (plugin) ساخته شده است. بیایید یک قابلیت به نام view_stats ایجاد کنیم. این قابلیت به تیم بازاریابی و البته به ادمین داده می شود. دیگر کاربران – مانند سردبیران و نویسندگان – لازم نیست که آمار را ببینند (که در بسیاری از موارد، داده های حساس هستند) بنابراین این قابلیت به آنها داده نخواهد شد.
وظیفه دوم ما این است که تصمیم بگیریم که بازاریابهای ما چه قابلیت های دیگری را نیاز دارند. بر اساس فرضیات ما در بالا، آنها قابلیت manage_links، read و manage_categories و moderate_comments را نیاز دارند.
در نهایت، ما را از برخی تکه کدهای ساده برای ایجاد یک نقش جدید به نام “بازاریابی” استفاده می کنیم، و قابلیت های ذکر شده در بالا را به آن اختصاص میدهیم. به محض این که این کارانجام شود، ما قادر به تعیین نقش “Marketing” به هر کاربر در صفحه “اضافه کردن کاربر” و “ویرایش مشخصات” خواهیم بود.
توابع پایه وردپرس
برای مدیریت موثر نقش ها و قابلیت ها، همه آننچه که شما نیاز دارید، پنج تابع بسیار ساده است.
• add_role() — شما را قادر به اضافه کردن یک نقش سفارشی میکند
• remove_role() — شما را قادر به حذف کردن یک نقش سفارشی میکند
• add_cap() — شما را قادر به اضافه کردن یک نقش سفارشی میکند
• remove_cap() — شما را قادر به حذف کردن یک قابلیت سفارشی از یک نقش میکند
• get_role() — گرفتن اطلاعات درباره ی یک نقش و همچنین قابلیت های همراه
اگر شما تمایل به دیدن مستندات مربوط به این توابع دارید، می توانید نگاهی به Roles و Capabilitiesدر بخش Codex بیندازید.
پیاده سازی نقش ها و قابلیتهای جدید
اجرای کامل نقش ها و قابلیت ها نیاز به بیش از پنج تابعی که به آن اشاره شد دارد. ما نیاز به استفاده از توابع برای چک کردن قابلیت ها، همچنین ویژگی هایی که فقط در دسترس نقش های خاص هستند داریم، و به همین ترتیب بسیاری توابع دیگر.
اضافه کردن نقش ها و توانمندی ها
$marketing = add_role( 'marketing', 'Marketing', array( 'read' => true, 'manage_links', 'manage_categories', 'moderate_comments', 'view-stats' )); $role = get_role( 'administrator' ); $role->add_cap( 'view-stats' );
تابعی که در بالا آمد نقش جدید “بازاریابی” ما را اضافه می کند. این امر چهار قابلیت که در حال حاضر در وردپرس گنجانده شده و یک فابلیت پنجم که یک قابلیت سفارشی است را می افزاید. همانطور که می بینید، هیچ برنامه نویسی خاصی برای اضافه کردن custom caps نیاز نیست، فقط آنها را در هنگام اضافه کردن نقش در array وارد کنید. زمانی که ما نقش جدید اضافه می کنیم، مطمئن شویم که قابلیت های جدید مان را به نقش ادمین هم اضافه می کنیم.
توجه داشته باشید که تابع add_role() یک موضوع WP_Roleرا به موفقیت برگرداند یا اینکه اگر نقش در حال حاضر وجود دارد آن را به NULL برگرداند.
از آنجا که کد بالا را در یک پلاگین استفاده می شود، بهترین راه استفاده از آن، استفاده از قلاب(hooks) است، و برای اضافه کردن قابلیت به administrator فقط زمانی که ما برای اولین بار نقش ایجاد میکنیم.
add_action( 'admin_init', 'add_custom_role' ); function add_custom_role() { $marketing = add_role( 'marketing', 'Marketing', array( 'read' => true, 'manage_links', 'manage_categories', 'moderate_comments', 'view-stats' )); if( null !== $marketing ) { $role = get_role( 'administrator' ); $role->add_cap( 'view-stats' ); } }
چک کردن قابلیت ها و نقش ها
هنگامی که ما سیستم خود را راه اندازی کردیم می توانیم توانایی ها و نقش ها را چک کنیم. این به ما اجازه می دهد که مطمئن شویم که تنها کاربرانی با قابلیت های درست می توانند کارهای معینی را انجام دهند.
add_action('admin_menu', 'register_stats_Page'); function register_stats_Page() { add_menu_page( 'Marketing Info', 'Marketing Info', 'view_stats', 'marketing-info', 'show_marketing_info' ); } function show_marketing_info(){ if( ! current_user_can( 'view-stats' ) ) { die( 'You are not allowed to view this page' ); } echo " This is the marketing stats page "; }
کد بالا یک منوی سطح بالا به بخش مدیریت برای آمار صفحه بازاریابی اضافه خواهد کرد. تابع add_menu_page() به شما اجازه میدهد که یک فابلیت را تعیین کنید(سومین استدلال) که مشخص میکند که آیا منو نشان داده شود یا نه.
توجه داشته باشید که حتی اگرخود تابع add_menu_page() قابلیت را به عنوان یک استدلال در نظر بگیرد، ما همچنان به چک کردن آن در تابع نیاز داریم که نشان دهنده ی محتوای صفحه میباشد.
این به سادگی ما را به دو تابع بعدیمان راهنمایی میکند: current_user_can() و user_can().
اگر شما می خواهید بررسی کنید که آیا کاربری که در حال حاضر وارد شده است یک قابلیت خاص دارد یا نه، به سادگی از فرمت زیر استفاده کنید:
if( current_user_can( 'any_capability' ) ) { // The user has the capability } else { // The user does not have the capability }
اگر شما می خواهم بررسی کنید که آیا یک کاربر دلخواه دارای یک توانایی خاص است یا نه، از تابع user_can() استفاده کنید:
if( user_can( 45, 'any_capability' ) ) { // The user with the ID of 45 has the capability } else { // The user with the ID of 45 does not have the capability }
برای اضافه کردن به توانایی ها، هر دو تابع همچنین می توانند نقشها را چک کنند:
if( current_user_can( 'marketing' ) ) { // The current user is a marketing person } else { // The current user is not a marketing person }
ایجاد انواع کاربری
در هنگام نوشتن یک اصطلاح رسمی، من نقش های مختلف را، زمانی که آنها نیاز به بسیاری از تغییرات در ابتدا و انتها دارند، “انواع کاربرها” مینامم. برای مثال فرض کنید که شما در حال ایجاد یک تم مرکز فروش هستید. جدای از administrator که مسئول نظارت بر همه است (و نویسندگان که در وبلاگ شرکت می نویسند) شما همچنین خریداران و فروشندگان دارید. اینها هر دو کاربران ثبت نام شده در وب سایت شما هستند، اما تا حدودی نیازهای front-ends آنها با هم متفاوت است.
صفحه مشخصات یک خریدار به احتمال زیاد تعدادی از چیزهایی را که او خریداری کرده است، یا اینکه هر چند رقت یکبار اقدام به خرید کرده است و چه زمانهایی به سیستم وارد شده است نشان می دهد، ، او همچنین یک لیست از دانلودها را میبیند.
صفحه مشخصات فروشنده، نمونه کارهای او، محبوب ترین آیتم او، واز این قبیل خواهد بود. هنگامی که او به صفحه اش وارد می شود احتمالا باید آمار فروش را ببینید.
کشف کردن نقش ها و مجوز ها
برای ساده کردن موارد ، کاربران یا خرید میکنند و یا می فروشند، و نمی توانید هر دو کار را با هم انجام دهند. اجازه دهید دو نقش با مجموعه ای از قابلیت ها ایجاد کنیم:
add_action( 'admin_init', 'add_custom_roles' ); function add_custom_roles() { $seller = add_role( 'seller', 'Seller', array( 'read' => true, 'delete_posts' => true, 'edit_posts' => true, 'delete_published_posts' => true, 'publish_posts' => true, 'upload_files' => true, 'edit_published_posts' => true, 'view_sales' => true, 'moderate_comments' => true )); $role = get_role( 'administrator' ); if( null !== $seller ) { $role->add_cap( 'view_sales' ); $role->add_cap( 'view_others_sales' ); } $buyer = add_role( 'buyer', 'Buyer', array( 'read' => true, 'add_payment' => true, 'download_resources' => true )); if( null !== $buyer ) { $role->add_cap( 'add_payment' ); $role->add_cap( 'add_others_payment' ); $role->add_cap( 'download_resources' ); $role->add_cap( 'download_others_resources' ); } }
در اینجا ایده این است که فروشندگان مانند نویسندگان هستند، که اقلام قابل فروش را به عنوان پست ذخیره میکنند. بنابراین، آنها قابلیت نویسندگان را دریافت میکنند. علاوه بر این، آنها همچنین می توانید آمار فروش اقلام خود را مشاهده کنند.
علاوه بر نمایش موارد، خریداران همچنین می توانید پرداخت ها را اضافه و فایل های مربوط به آیتم هایی که خریداری میکنند را دانلود کنند.
ادمین ها همه این مجوزها را دریافت می کنند، اما علاوه بر این، آنها ممکن است آمار همه ی کاربران را نیز مشاهده کنند، به هر اکانت پرداخت اضافه کنند، و ممکن است منبع هر آیتم را دانلود کنند.
پیاده سازی ظاهر
از اینجا به بعد موضوع استفاده از نقش ها و توانایی های ما در بررسی توابع برای تعیین این که چه کسی چه چیزی را ببیند است. بیایید نگاهی به دو نمونه و مثال بیاندازیم:
فهرست کردن کاربران
اگر ما تمام کاربران وب سایت را لیست کنیم، می توانیم اقلام خریداری شده برای خریداران و مواردفروخته شده را برای فروشندگان نشان دهیم. دراینجا نشان میدهیم چگونه می توان این کار را انجام داد:
<!-- User Data comes from a WordPress user object stored in the $user variable --> <div class='user'> <div class='row'> <div class='threecol'> <?php echo get_avatar( $user->ID, 120 ) ?> </div> <div class='sixcol'> <h1><?php echo $user->display_name ?></h1> <?php echo $user->description ?> </div> <div class='threecol last'> <?php if( user_can( $user->ID, 'buyer' ) ) : ?> <div class='counter'> <span class='number'><?php get_purchases_count( $user->ID ) ?></span> <span class='text'>purchases</span> </div> <?php else ?> <div class='counter'> <span class='number'><?php get_sales_count( $user->ID ) ?></span> <span class='text'>sales</span> </div> <?php endif ?> </div> </div> </div>
بسیاری از کد ارائه شده در بالا، همان HTML قدیمی ساده است، اما نکته مهم برای از استفاده بردن این است که چگونه counter ایجاد میشود.
توجه داشته باشید که get_purchases_count() و get_sales_count() ساختگی هستند(البته آنها بخشی از وردپرس نیستند).
البته، در یک مثال دنیای واقعی ما باید مطمئن شویم که تنها خریداران و فروشندگان فهرست شده باشند، و ممکن است نیاز داشته باشیم که به طور کامل یک قالب جداگانه برای آنها ایجاد کنیم(اگر تفاوت ها به اندازه کافی متعدد هستند).
foreach( $users as $user_id ) { $user = get_userdata( $user_id ); if( user_can( $user->ID, 'buyer' ) ) { get_template_part( 'userlist', 'buyer' ); } else { get_template_part( 'userlist', 'seller' ); } }
هنگامی looping از طریق کاربرانمان در بالا، بسته به نقش کاربر یا userlist-buyer.php ویا userlist-seller.php استفاده خواهد شد.
نتیجه گیری
نقش کاربر و قابلیت ها، ابزارهای بسیار قدرتمندی در وردپرس هستند. هر زمان که شما یک پلاگین که نیاز به پیاده سازی یک تابع خاص مبتنی بر کاربر را دارد، ساختید، باید استفاده از این ابزارها را مد نظر قرار دهید.
جدای از اینکه این امر زندگی شما را آسان تر میکند (و قابل کنترل تر)، فرآیندها را بر روی وب سایت شما ساده تر کرده و رد گیری کردن هر گونه مشکلات را آسان تر میکند.
- مشکلی دارید؟ جواب خود را در پست فروم بگیرید
- منبع : بیست اسکریپت لطفا رعایت کنید