افراد زیادی هستند که از ووکامرس برای فروش محصولاتشان به مشتریان و عمده فروشان استفاده میکنند. اگر این افراد بخواهند سفارشات ووکامرس را براساس هر نقش فیلتر و مشاهده کنند، به صورت پیشفرض هیچ راه حلی وجود ندارد. ما در این نوشته به شما نحوه فیلتر سفارشهای ووکامرس براساس نقش کاربر را آموزش میدهیم.
مشاهده سفارشهای ووکامرس براساس نقش کاربر
قطعه کد زیر سفارشات ووکامرس را براساس نقش کاربر فیلتر خواهد کرد. در واقع این قطعه کد یک لیست کشویی شامل همه نقشهای موجود در برگه سفارشات پیشخوان وردپرس ایجاد خواهد کرد و مدیر فروشگاه میتواند با انتخاب هر نقش، سفارشاتی که توسط کاربران آن نقش ایجاد شده را مشاهده کند.
نکته: به منظور استفاده از کد، پیشنهاد میشود آن را در افزونه اختصاصیتان یا در فایل 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
با سلام و درود
لطفا کد را تصحیح بفرمائید
کد بدرستی کار نمی کند و ایراد دارد
با تشکر
باسلام
ممنون از شما. کد ایرادی نداشت فقط اگر نقشی هیچ سفارشی نداشت، باز هم تمامی سفارشات را نمایش میداد که این موضوع اصلاح شد.
باتشکر
با تشکر فراوان از استاد بزرگوار که پاسخ دادید
منتها بنده همین الان دوباره همین کد را کپی زدم و از بخش {نمایش- ویرایشگر پرونده پوسته} در فایل functions.php پوسته فرزند قالب وودمارت قرار داده و ذخیره کردم ولی در بخش سفارشات ووکامرس لیست کشویی که در عکس بالا نشان داده اید اضافه نمی شود.
اگر کار خاصی هست لطفا بنده را راهنمایی بفرمائید
سلام مجدد دوست عزیز
این کد وابستگی به هیچ پوستهای ندارد چون عملکرد آن در بخش پیشخوان وردپرس میباشد. شما در قالب یک افزونه دلخواه هم میتوانید آن را به سایت خود اضافه کنید.
ممنون استاد ولی در چندین هاست مختلف دایرکت ادمین و سی پنل، بارها و بارها و به شکلهای مختلف با پوسته فرزند وودمارت تست کردم متاسفانه هیچ گزینه ای اضافه نمی شود.
بازم ممنون که پاسخ دادید
ممنون از شما . کد کاربردی بود.