نوشته های وردپرس: چگونه پست های کاربران را از دید یکدیگر مخفی کنیم؟

در سیستم مدیریت محتوای وردپرس هر کاربری که ایجاد می کنید باید یک نقش تعریف شده و مشخص(مدیر، نویسنده، مشارکت کننده و …) داشته باشد، هر چند که با افزونه قدرتمند Members می توانید به یک کاربر چندین نقش متفاوت اختصاص دهید.

در هر صورت ممکن است کاربرانی با نقش نویسنده(Author) یا مشارکت کننده(Contributor) داشته باشید که در تولید و انتشار محتوا کمک حال شما هستند، در چنین شرایطی هر کاربری می تواند در لیست همه نوشته ها موارد زیر را مشاهده کند:

  1. کلیه نوشته های وب سایت
  2. تعداد کل نوشته ها
  3. نوشته های منتشر شده
  4. نوشته های در حال بررسی

برای درک بهتر موضوع فرض کنید یک شرکت تولیدی ۲۰ واحد مختلف(روابط عمومی، فروش، قراردادها، بازاریابی و …) دارد که به ازای هر واحد یک کاربر با نقش مدنظر نیز ایجاد کرده است، حال شرکت فوق از شما می خواهد امکانی فراهم کنید تا هر واحد فقط به صفحات و نوشته های خود دسترسی داشته باشد.

در چنین شرایطی از چه مکانیزم و ترفندی استفاده می کنید؟ برای دریافت پاسخ با ما همراه باشید تا اینکار را به ساده ترین روش ممکن پیاده سازی کنیم.

ایجاد کاربر نویسنده

از آنجایی که در حال حاضر من تنها نویسنده استارتاپ تاتس هستم یک کاربر فرضی به نام “مجید خدایی” با نقش نویسنده ایجاد می کنم، مجید اولین پست خود را منتشر کرده و لیست نوشته های وردپرس را به صورت زیر مشاهده می کند.

همانطور که ملاحظه می کنید او نوشته های من را می بیند اما نمی تواند آنها را تغییر دهد.

کاربر نویسنده وردپزس همه نوشته ها را مشاهد می کند

 

حالا کدهای زیر را در فایل functions.php قرار می دهیم.

function hide_posts_from_other_users( $query ) {

    if ( is_admin()
        && $query->is_main_query()
        && get_current_screen()->id == 'edit-post'
        && !current_user_can( 'manage_options' ) ) {
        $query->set( 'author', get_current_user_id() );
    }
    return $query;
}

add_action( 'pre_get_posts', 'hide_posts_from_other_users', 10, 1 );

 

این بار در لیست نوشته ها فقط پست های متعلق به مجید لود می شود، اما مقدار “همه” و “منتشر شده” همچنان مجموع پست ها را نشان می دهد.

نمایش پست های متعلق به کاربر در لیست نوشته های وردپرس

 

برای اصلاح تعداد پست ها کدهای زیر را به functions.php اضافه می کنیم.

function change_post_count( $views ){

    $currentUserID = get_current_user_id();

    if ( get_current_screen()->id == 'edit-post' 
         && $currentUserID !== 0 
         && !current_user_can( 'manage_options' ) ) {

        global $wpdb;

        $results = $wpdb->get_results( "SELECT post_status,COUNT(*) count_p 
                                                 FROM $wpdb->posts
                                         WHERE post_type='post'
                                               AND post_author=$currentUserID
                                               GROUP BY post_status" );

        $status_count = array();
        foreach ( $results as $result ) {
            $status_count[ $result->post_status ] = $result->count_p;
        }

        unset( $views['all'] );
        unset( $views['mine'] );

        foreach ( $views as $index => $view ) {
            if ( array_key_exists( $index, $status_count ) ) {
                $views[$index] = preg_replace( '/\(.+\)/U',
                                  '(' . $status_count[$index] . ')', $views[$index] );
            } else {
                $views[$index] = preg_replace( '/\(.+\)/U',
                                  '(' . ۰ . ')', $views[$index] );
            }
        }
    }
    return $views;
}

add_filter( 'views_edit-post', 'change_post_count', 10, 1 );

 

در نهایت خروجی کار بدین صورت خواهد بود.

اصلاح تعداد پست های در لیست نوشته های وردپرس

جمع بندی

توجه داشته باشید کدهای بررسی شده فقط در پنل مدیریتی وردپرس آن هم در لیست نوشته ها اجرا خواهد شد و هیچگونه سربار اضافی به سایر بخش ها تحمیل نمی کند.

نظرات و سوالات کاربران

پاسخی بگذارید

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