اگه بخوایین مقدار کل فروشها یا به تفیکی ماه و روز رو در ووکامرس ببینید به راحتی با استفاده از ابزارهای داخلی ووکامرس میتونین این کار رو انجام بدین. اما مشاهده میزان فروش یک دسته بندی چیزی هست که ووکامرس بصورت پیشفرض در خودش نداره.
البته شاید سوال پیش بیاد چرا محسابه فروش یک دسته بندی خاص؟
این مسعله برای من مهم هست. چون در یکی از وبسایتهایی که دارم همزمان دو کتگوری مختلف دارم با محصولاتی که همدیگه مرتبط نیستن و میخوام بدونم هر دسته بندی در طول سال یا ماه چقدر برای من فروش داشته.
برای اینکار اول سفارشات یک دسته بندی رو دریافت میکنیم و سپس به آرایههای سفارشات لوپ میزنیم تا میزان فروشهارو محسابه کنیم. نگران نباشین کار سختی نیست. فقط کد زیر رو توی function.php قالبتون قرار بدید.
/**
* @snippet ووکامرس: محاسبه کل فروش یک دسته بندی
* @more articl pournasir.com
* @compatible WooCommerce 5
*/
// ---------------
// 1. دریافت سفارشات
function pournasir_get_orders_by_product_cat( $cat_slug, $order_status = array( 'wc-completed' ) ) {
global $wpdb;
$args = array(
'limit' => -1,
'status' => 'publish',
'return' => 'ids',
'category' => array( $cat_slug ),
);
$product_ids = wc_get_products( $args );
$results = $wpdb->get_col( "
SELECT order_items.order_id
FROM {$wpdb->prefix}woocommerce_order_items as order_items
LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta as order_item_meta ON order_items.order_item_id = order_item_meta.order_item_id
LEFT JOIN {$wpdb->posts} AS posts ON order_items.order_id = posts.ID
WHERE posts.post_type = 'shop_order'
AND posts.post_status IN ( '" . implode( "','", $order_status ) . "' )
AND order_items.order_item_type = 'line_item'
AND order_item_meta.meta_key = '_product_id'
AND order_item_meta.meta_value IN ( '" . implode( "','", $product_ids ) . "' )
" );
return $results;
}
// 2. محسابه میزان فروش
function pournasir_cat_sales( $cat_slug ) {
$orders = pournasir_get_orders_by_product_cat( $cat_slug );
$total = 0;
foreach ( $orders as $order_id ) {
foreach ( wc_get_order( $order_id )->get_items() as $key => $item ) {
$product_id = $item->get_product_id();
if ( ! $product_id ) continue;
if ( has_term( $cat_slug, 'product_cat', $product_id ) ) $total += $item->get_total();
}
}
return wc_price( $total );
}
// 3. استفاده
// برای نمایش دستور زیر را در فایل مورد نظر خود قرار دهید.
echo pournasir_cat_sales( 'tables' );