如何获得woocommerce中特定产品的总产品销售计数

时间:2021-05-01 17:34:59

标签: wordpress woocommerce

我需要从 woocommerece 的特定日期获取特定产品的已售产品总数。我尝试了以下

我尝试了代码。

function wh_get_total_sold_by_product_id($date_from, $product_id)
{
    global $wpdb;
    $date_to = date('Y-m-d');

    $sql = "
    SELECT COUNT(*) AS sale_count
    FROM {$wpdb->prefix}woocommerce_order_items AS order_items
    INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS order_meta ON order_items.order_item_id = order_meta.order_item_id
    INNER JOIN {$wpdb->posts} AS posts ON order_meta.meta_value = posts.ID
    WHERE order_items.order_item_type = 'line_item'
    AND order_meta.meta_key = '_product_id'
    AND order_meta.meta_value = %d
    AND order_items.order_id IN (
        SELECT posts.ID AS post_id
        FROM {$wpdb->posts} AS posts
        WHERE posts.post_type = 'shop_order'
            AND posts.post_status IN ('wc-completed','wc-processing')
             AND DATE(posts.post_date) BETWEEN %s AND %s
    )
    GROUP BY order_meta.meta_value";

    return $wpdb->get_var($wpdb->prepare($sql, $product_id, $date_from, $date_to));
}

更新

   $orders = get_posts( array(
    'numberposts' => - 1,
    'post_type'   => array( 'shop_order' ),
    'post_status' => array( 'wc-completed', 'wc-processing' ),
    'date_query'  => array(
    'after'   => date('Y-m-d', time() - 86400),
    'before'  => date('Y-m-d', time()+ 86400),
)
) );

$total_sales = 0;
foreach ( $orders as $order_id ) {
    $order = wc_get_order( $order_id );
    foreach ( $order->get_items() as $item_id => $item_values ) {
        $product_id = $item_values->get_product_id(); 
        $total_sales = $total_sales + get_post_meta( $product_id, 'total_sales', true );
        
    }
}

echo $total_sales;

但该函数只返回订单总数,而不是产品数量。我怎样才能使它的产品计数。提前致谢

1 个答案:

答案 0 :(得分:0)

WC 使用键 total_sales 在 post meta 中保存产品的总销售额。试试下面的代码。

$total_sales = get_post_meta( $product_id, 'total_sales', true );
<块引用>

date_query 中使用 get_posts 作为参数。检查以下 代码。

$orders = get_posts( array(
    'numberposts' => - 1,
    'post_type'   => array( 'shop_order' ),
    'post_status' => array( 'wc-completed', 'wc-processing' ),
    'date_query'  => array(
        'after'   => '2020-05-01',
        'before'  => '2021-05-01',
    )
) );

$total_sales = 0;
foreach ( $orders as $order_id ) {
    $order = wc_get_order( $order_id );
    foreach ( $order->get_items() as $item_id => $item_values ) {
        $product_id = $item_values->get_product_id(); 
        $total_sales = $total_sales + get_post_meta( $product_id, 'total_sales', true );
    }
}

echo $total_sales;

有用的链接