برخی اوقات ممکن است بخواهید سفارشات کاربر را در یک محدوده زمانی مشخص نمایش دهید یا شاید بخواهید مبلغ کل سفارشات تکمیل شده توسط کاربر را به او نشان دهید. در این نوشته قصد داریم تا نمایش سفارشات کاربر براساس محدوده زمانی در ووکامرس را به شما آموزش دهیم.
در صورتی که با کدهای کوئری در وردپرس آشنا باشید، میدانید که سفارشات ووکامرس یک نوع پست تایپ محسوب شده و در جداول وردپرس با نام shop_order ذخیره میشوند. پس به منظور نمایش سفارشات یک کاربر، کافی است از کوئری نمایش نوشتههای وردپرس استفاده کرد و مقادیر را براساس سفارشات تنظیم نمود.
نمایش سفارشات کاربر در یک محدوده زمانی خاص
اگر میخواهید لیست سفارشات کاربر کنونی را در یک محدوده زمانی خاص در پنل کاربریش نمایش دهید، قطعه کد زیر این امکان را برای شما انجام خواهد داد. این قطعه کد برای محدوده زمانی ۱۰ روز اخیر تنظیم شده است که میتوانید آن را تغییر دهید.
نکته: برای اجرای این کد، میتوانید آن را در فایل functions.php پوسته فرزند قرار دهید یا از افزونه Code Snippets استفاده نمایید.
/**
* @snippet Get all customer orders
* @author Tidaweb
* @compatible WordPress All Versions
*/
function get_all_customer_orders()
{
$customer_orders = get_posts( array(
'numberposts' => - 1,
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
'post_type' => array( 'shop_order' ),
'post_status' => array_keys( wc_get_order_statuses() ),
'date_query' => array(
'after' => date('Y-m-d', strtotime('-10 days')),
'before' => date('Y-m-d', strtotime('today'))
)
) );
return $customer_orders;
}
همانطور که گفته شد، تابع بالا تمامی سفارشات ۱۰ روز اخیر کاربر کنونی را به صورت لیست بر میگرداند. نحوه فراخوانی تابع به صورت زیر میباشد. پس از مقداردهی متغیر customer_orders$ شما یک لیست خواهید داشت که میتوانید بنا به نیاز خود، ظاهر آن را طراحی و لیست سفارشات رو نمایش دهید.
$customer_orders = get_all_customer_orders();
تابع بالا، سفارشات کاربر با هر وضعیتی را نمایش میدهد ولی اگر بخواهید فقط سفارشات تکمیل شده را نمایش دهید، تابع زیر این کار را برای شما انجام خواهد داد.
/**
* @snippet Get all customer completed orders
* @author Tidaweb
* @compatible WordPress All Versions
*/
function get_all_customer_orders()
{
$customer_orders = get_posts( array(
'numberposts' => - 1,
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
'post_type' => array( 'shop_order' ),
'post_status' => array( 'wc-completed' ),
'date_query' => array(
'after' => date('Y-m-d', strtotime('-10 days')),
'before' => date('Y-m-d', strtotime('today'))
)
) );
return $customer_orders;
}
اگر نیاز دارید تا لیست سفارشات هر کاربر را براساس شناسه آن به صورت عمومی منتشر کنید، میتوانید به جای تابع بالا از تابع زیر استفاده کنید. در تابع زیر، شناسه کاربر به صورت ورودی به تابع ارسال میشود.
/**
* @snippet Get all customer orders by user_id
* @author Tidaweb
* @compatible WordPress All Versions
*/
function get_all_customer_orders( $user_id )
{
$customer_orders = get_posts( array(
'numberposts' => - 1,
'meta_key' => '_customer_user',
'meta_value' => $user_id,
'post_type' => array( 'shop_order' ),
'post_status' => array_keys( wc_get_order_statuses() ),
'date_query' => array(
'after' => date('Y-m-d', strtotime('-10 days')),
'before' => date('Y-m-d', strtotime('today'))
)
) );
return $customer_orders;
}
نحوه فراخوانی تابع بالا به صورت زیر خواهد بود.
$customer_orders = get_all_customer_orders( 23 ); // 23 is user's ID in wp
نمایش مبلغ کل سفارشات کاربر
اگر میخواهید مبلغ کل سفارشات کاربر کنونی را در یک محدوده زمانی خاص در پنل کاربریش نمایش دهید، قطعه کد زیر این امکان را برای شما فراهم میکند. این قطعه کد برای محدوده زمانی ۱۰ روز اخیر تنظیم شده است که میتوانید آن را تغییر دهید.
نکته: برای اجرای این کد، میتوانید آن را در فایل functions.php پوسته فرزند قرار دهید یا از افزونه Code Snippets استفاده نمایید.
/**
* @snippet Get customer total orders
* @author Tidaweb
* @compatible WordPress All Versions
*/
function get_customer_total_orders() {
$customer_orders = get_posts( array(
'numberposts' => - 1,
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
'post_type' => array( 'shop_order' ),
'post_status' => array( 'wc-completed' ),
'date_query' => array(
'after' => date('Y-m-d', strtotime('-10 days')),
'before' => date('Y-m-d', strtotime('today'))
)
) );
$total = 0;
foreach ( $customer_orders as $customer_order ) {
$order = wc_get_order( $customer_order );
$total += $order->get_total();
}
return $total;
}
نحوه فراخوانی تابع بالا به صورت زیر میباشد.
echo get_customer_total_orders()." ".get_woocommerce_currency_symbol();
در صورتی که میخواهید مبالغ کل سفارشات کاربر را به صورت عمومی نمایش دهید، کافی است به جای تابع بالا، از تابع زیر استفاده کنید. تابع زیر شناسه کاربر را به عنوان آرگومان ورودی دریافت میکند و براساس شناسه داده شده، میتواند مبلغ کل سفارشات کاربر را نمایش دهد.
/**
* @snippet Get customer total order by user_id
* @author Tidaweb
* @compatible WordPress All Versions
*/
function get_customer_total_order( $user_id ) {
$customer_orders = get_posts( array(
'numberposts' => - 1,
'meta_key' => '_customer_user',
'meta_value' => $user_id,
'post_type' => array( 'shop_order' ),
'post_status' => array( 'wc-completed' ),
'date_query' => array(
'after' => date('Y-m-d', strtotime('-10 days')),
'before' => date('Y-m-d', strtotime('today'))
)
) );
$total = 0;
foreach ( $customer_orders as $customer_order ) {
$order = wc_get_order( $customer_order );
$total += $order->get_total();
}
return $total;
}
در مقاله بالا نمایش سفارشات کاربر براساس محدوده زمانی در ووکامرس آموزش داده شد. در صورتی که سؤالی در این زمینه دارید، میتوانید آن را از بخش دیدگاهها با ما در میان بگذارید. همچنین اگر به دنبال ترفندهای بیشتر هستید، به ترفند وردپرس مراجعه کنید.