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

فیلتر سفارش‌ها در پیشخوان وردپرس

مشاهده سفارش‌های ووکامرس براساس نقش کاربر

قطعه کد زیر سفارشات ووکامرس را براساس نقش کاربر فیلتر خواهد کرد. در واقع این قطعه کد یک لیست کشویی شامل همه نقش‌های موجود در برگه سفارشات پیشخوان وردپرس ایجاد خواهد کرد و مدیر فروشگاه می‌تواند با انتخاب هر نقش، سفارشاتی که توسط کاربران آن نقش ایجاد شده را مشاهده کند.

نکته: به منظور استفاده از کد، پیشنهاد می‌شود آن را در افزونه اختصاصی‌تان یا در فایل functions.php پوسته فرزند قرار دهید.

/**
 * @snippet       Filter Woocommerce Orders By User Role
 * @author        Jeroen Sormani
 * @testedwith    WooCommerce 4
 */
 
add_action( 'restrict_manage_posts', 'js_shop_order_user_role_filter' );
 
/**
 * Add a role filter dropdown to the WooCommerce shop order page.
 * 
 * @return void
 */
function js_shop_order_user_role_filter()
{

	global $typenow, $wp_query;

	if ( in_array( $typenow, wc_get_order_types( 'order-meta-boxes' ) ) )
	{
		$user_role	= '';

		// Get all user roles
		$user_roles = array( 'guest' => 'Guest' );
		foreach ( get_editable_roles() as $key => $values ) {
			$user_roles[ $key ] = $values['name'];
		}

		// Set a selected user role
		if ( ! empty( $_GET['_user_role'] ) ) {
			$user_role	= sanitize_text_field( $_GET['_user_role'] );
		}

		// Display drop down
		?>
        <select name='_user_role'>
			<option value=''><?php _e( 'Select a user role', 'woocommerce' ); ?></option>
            <?php foreach ( $user_roles as $key => $value ) : ?>
            <option <?php selected( $user_role, $key ); ?> value='<?php echo $key; ?>'><?php echo $value; ?></option>
            <?php endforeach; ?>
        </select>
        <?php
	}

}

add_filter( 'pre_get_posts', 'js_shop_order_user_role_posts_where' );

/**
 * Filter orders by user role on the WooCommerce shop order page.
 * 
 * @param WP_Query $query The main WP_Query object.
 * 
 * @return void
 */
function js_shop_order_user_role_posts_where( $query )
{

	if ( ! $query->is_main_query() || empty( $_GET['_user_role'] ) || $_GET['post_type'] !== 'shop_order' ) {
		return;
	}
	$ids = array();

	if ( $_GET['_user_role'] != 'guest' ) {
		$ids = get_users( array( 'role' => sanitize_text_field( $_GET['_user_role'] ), 'fields' => 'ID' ) );
		$ids = array_map( 'absint', $ids );
	} else {
		$ids = array( 0 );
	}
	
	print_r($ids);
	
	if ( empty( $ids ) ) {
        $query->set( 'post__in', array( 0 ) ); // Set an empty array to show no posts
        return;
    }

	$query->set( 'meta_query', array(
		array(
			'key' => '_customer_user',
			'compare' => 'IN',
			'value' => $ids,
		)
	) );
}

در این نوشته ترفند فیلتر سفارش‌های ووکامرس براساس نقش کاربری توضیح داده شد. پس از اجرای کد بالا، لیست کشویی همانند تصویر زیر در برگه سفارش‌های ووکامرس در پیشخوان ایجاد خواهد شد و مدیر فروشگاه به راحتی می‌تواند با انتخاب هر نقش و کلیک کردن بر روی دکمه فیلتر، سفارشات فیلتر شده را مشاهده کند. در صورتی که سؤالی دارید، می‌توانید آن را از طریق دیدگاه‌ها با ما در میان بگذارید.

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

منبع : jeroensormani

۴.۷/۵ - (۸۶ امتیاز)

6 thoughts on “فیلتر سفارش‌های ووکامرس براساس نقش کاربر

    • مدیر سایت میگوید:

      باسلام
      ممنون از شما. کد ایرادی نداشت فقط اگر نقشی هیچ سفارشی نداشت، باز هم تمامی سفارشات را نمایش می‌داد که این موضوع اصلاح شد.
      باتشکر

      • علا علایی میگوید:

        با تشکر فراوان از استاد بزرگوار که پاسخ دادید
        منتها بنده همین الان دوباره همین کد را کپی زدم و از بخش {نمایش- ویرایشگر پرونده پوسته} در فایل functions.php پوسته فرزند قالب وودمارت قرار داده و ذخیره کردم ولی در بخش سفارشات ووکامرس لیست کشویی که در عکس بالا نشان داده اید اضافه نمی شود.
        اگر کار خاصی هست لطفا بنده را راهنمایی بفرمائید

        • مدیر سایت میگوید:

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

  1. علا علایی میگوید:

    ممنون استاد ولی در چندین هاست مختلف دایرکت ادمین و سی پنل، بارها و بارها و به شکلهای مختلف با پوسته فرزند وودمارت تست کردم متاسفانه هیچ گزینه ای اضافه نمی شود.
    بازم ممنون که پاسخ دادید

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

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