امکان فیلتر نوشته ها(Posts) براساس نویسنده در بخش مدیریت وردپرس

فیلتر پست ها بر اساس نویسنده مطلب

همانطور که می دانید در لیست “همه ی نوشته ها(All Posts)” در بخش مدیریت وردپرس می توانید نوشته ها را بر اساس تاریخ و دسته فیلتر(صافی) کنید. ما می خواهیم در این پست آموزشی علاوه بر موارد موجود، امکان فیلتر پست ها بر اساس نویسنده را به لیست نوشته ها اضافه کنیم.

امکان فیلتر پست های بر اساس نویسنده در وردپرس

برای انجام اینکار کدهای زیر را در فایل functions.php قرار دهید، توجه داشته باشید که این قابلیت برای صفحات و انواع پست های سفارشی(Custom Post Types) نیز فعال خواهد شد.

function filter_post_type_by_author() {
    $params = array(
        'name' => 'author', 
        'show_option_all' => 'همه نویسندگان'
    );
    if ( isset($_GET['user']) )
        $params['selected'] = $_GET['user'];

    wp_dropdown_users( $params );
}
add_action( 'restrict_manage_posts', 'filter_post_type_by_author' );

 

اگر می خواهید فقط کاربران دارای نقش مدیریت را در لیست نویسندگان نمایش دهید ساختار params$ را به صورت زیر مشخص نمائید، برای اطلاعات بیشتر درباره سایر پارامترها به WordPress Codex مراجعه کنید.

$params = array(
	'name' => 'author',
	'show_option_all' => 'همه نویسندگان',
	'role' => 'administrator'
);

 

برای اینکه بتوانید کاربران وردپرس را بر اساس نقشی(Role) که دارند گروه بندی کنید از کدهای زیر استفاده نمائید.

function filter_post_type_by_author() {
    global $wp_roles;
    $roles = $wp_roles->roles;
    if ( ! empty( $roles ) ) {
        echo '<select name="author"><option value="">همه نویسندگان</option>';
        foreach ( $roles as $role => $data ) {
            $users = get_users( 'orderby=display_name&role=' . $role );
            if ( ! empty( $users ) ) {
                echo '<optgroup label="' . esc_attr( ucfirst( $role ) ) . 's">';
                foreach ( $users as $user ) {
                    echo '<option value="' . absint( $user->ID ) . '"' . ( isset( $_GET['author'] ) && $user->ID == $_GET['author'] ? ' selected' : '' ) . '>' . $user->data->display_name . '</option>';
                }
                echo '</optgroup>';
            }
        }
        echo '</select>';
    }
}
add_action( 'restrict_manage_posts', 'filter_post_type_by_author' );

 

نتیجه نهایی در تصویر زیر نشان داده شده است.

گروه بندی کاربران وردپرس بر اساس نقش

فیلتر نوشته ها بر اساس نقش کاربری

برای اینکه بتوانید نوشته ها را بر اساس نقش کاربری هر فرد فیلتر نمائید کدهای زیر را در فایل functions.php قرار دهید.

function filter_posts_by_user_roles(){

    global $post_type;
    if( $post_type == 'post' ){

        $user_role  = '';
        $user_roles = array();
        foreach ( get_editable_roles() as $key => $values ) :
            $user_roles[ $key ] = $values['name'];
        endforeach;

        if ( ! empty( $_GET['user_role'] ) ) {
            $user_role  = sanitize_text_field( $_GET['user_role'] );
        }
        ?>
        <select name='user_role'>
        <option value=''>کلیه نقش ها</option>
            <?php
            foreach ( $user_roles as $key => $value ) :?>
                <option <?php selected( $user_role, $key ); ?> value='<?php echo $key; ?>'>
                         <?php echo translate_user_role( $value,'default' ); ?></option>
            <?php
            endforeach;
            ?>
        </select>
        <?php
    }
}
add_action( 'restrict_manage_posts', 'filter_posts_by_user_roles' );

function change_default_posts_query_for_user_roles( $query ) {

    if ( ! is_admin() ) {
        return;
    }

    global $pagenow;

    if ( 'edit.php' === $pagenow && 'post' === $query->query['post_type'] ) {

        if ( isset( $_GET['user_role'] ) ) {
            $role = $_GET['user_role'];
            $users   = new WP_User_Query( array( 'role' => $role ) );
            $results = $users->get_results();

            $user_ids = array();
            foreach( $results as $result ) {
                $user_ids[] = (int) $result->ID;
            }

            $user_ids = ! empty( $user_ids ) ? $user_ids : PHP_INT_MAX;

            $query->set( 'author__in', $user_ids );

        }
    }

}
add_action( 'pre_get_posts', 'change_default_posts_query_for_user_roles' );

 

خروجی نهایی را در تصویر زیر مشاهده می کنید.

فیلتر نوشته ها بر اساس نقش کاربری

برچسب ها
سعید یاورنیا 118 نوشته 130 دیدگاه

توسعه دهنده PHP و Wordpress
توسعه وب سایت یکی از کارهایی است که تلاش می کنم تخصصم رو در اون بالا ببرم، یادگیری تکنولوژی های جدید یکی از چالش هایی است که به شدت به آن علاقمند هستم.

دیدگاه ‌ها

  • سعید ۱ فروردین ۱۳۹۸ - ۱۱:۵۰

    من از کد php برای شمارش بازدید استفاده می کنم (بدون افزونه شمارش بازدید). چکار کنم که تعداد بازدیدها رو جلوی هر مطلب در بخش مدیریت نوشته ها نشون بده؟

    • سعید یاورنیا ۳ فروردین ۱۳۹۸ - ۰۹:۱۳

      سلام دوست عزیز
      از نمونه کد زیر استفاده کنید، در این مثال از custom field استفاده شده


      function add_view_count_column($defaults)
      {
      $defaults['post_view'] = 'تعداد بازدید';
      return $defaults;
      }
      add_filter('manage_posts_columns', 'add_view_count_column');

      function set_view_count_column($column_name, $post_ID)
      {
      if ($column_name == 'post_view') {
      $count = get_post_meta($post_ID, 'post_view_counter', true);
      echo !empty($count) ? $count : 0;
      }
      }
      add_action('manage_posts_custom_column', 'set_view_count_column', 10, 2);

  • آروین ۳۱ اردیبهشت ۱۳۹۸ - ۱۳:۱۱

    سلام وقت بخیر

    قربان چطور میشه به جای این که بر اساس نام کاربری قبلتر انجام بشه بر اساس نقش کاربری (role) این کار انجام بشه ؟

    یعنی مثلا اگر ما سه دسته کاربر داریم (۱و ۲و ۳) که تمام این ها اجازه نوشتن پست رو دارن ، چطور ما انتخاب کنیم که مثلا تمام پست هایی که مربوط به کاربران با نقش کاربری ۱ هست رو نشون بده . یا مثلا ۲ و …

  • آروین ۱۸ مرداد ۱۳۹۸ - ۰۲:۰۴

    سلام وقت بخیر
    ممنون از سایت و مطالب خوبتون

    چطور میشه پست ها رو بر اساس چند دسته بندی جداگانه داخل سایت فیلتر کرد ؟

    برای مثال ما یه دسته بندی به عنوان استان در نظر میگیریم و نام استان ها رو به عنوان زیر دسته برای اون در نظر میگیریم ، یه دسته بندی جداگانه ب عنوان جنسیت و دو تا دسته بندی زن و مرد رو در نظر میگیریم و ی دسته بندی دیگه مثلا نوع خدمات با زیر دسته های تعمیر و رنگ و … و به هر پست این دسته بندی ها رو تخصیص میدیم . مثلا استان تهران جنسیت مرد و خدمات تعمیر .

    حالا کدی میخوام که مثلا سه تا dropdown داشته باشه و کاربرای سایت بتونن در سایت انتخاب کنن که تمام پست هایی با استان تهران جنسیت مرد و خدمات تعمیر رو بیاره براشون و یا مواردی از این دست .

    داخل سایت شما و جاهای دیگه رو خیلی گشتم ولی پیدا نکردم . ممنون میشم راهنمایی بفرمایید .

  • آروین ۱۸ مرداد ۱۳۹۸ - ۰۲:۴۵

    سپاس بسیار عالی بود .

دیدگاهتان را بنویسید.

نشانی ایمیل شما منتشر نخواهد شد، بخش‌های موردنیاز با * مشخص شده‌اند.