【问题标题】:How to show woocommerce product sold quantity in last 24 hrs?如何显示最近 24 小时内 woocommerce 产品的销售量?
【发布时间】:2019-10-15 17:33:13
【问题描述】:

我正在尝试向我的产品详细信息页面添加一项功能。我希望用户可以看到过去 24 小时的销售数量。

例如,我将代码添加到我的 function.php 文件中

add_action( 'woocommerce_product_meta_start', 'bbloomer_product_sold_count', 11 );

function bbloomer_product_sold_count() {
   global $product;
   $units_sold = $product->get_total_sales();
   if ( $units_sold ) echo '<div class="itemSold">' . sprintf( __( '%s Sold Items', 'woocommerce' ), $units_sold ) . '</div>';
}

这向我显示了所有时间的销售数量,但我想要最后 24 小时。请指导我如何做到这一点非常感谢。提前谢谢。

【问题讨论】:

    标签: php wordpress woocommerce hook-woocommerce


    【解决方案1】:

    在你的情况下,你可以从数据库中手动查询它并像这样构建函数:

    add_action( 'woocommerce_product_meta_start', 'bbloomer_product_sold_count', 11 );
    
    function bbloomer_product_sold_count() {
        global $product;
        global $wpdb;
    
        $product_id = $product->id();
        $date_to = date("Y-m-d H:i:s", strtotime('+24 hours'));
        $date_from = date("Y-m-d H:i:s");
    
        $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";
        $units_sold = $wpdb->get_var($wpdb->prepare($sql, $product_id, $date_from, $date_to));
        if ( $units_sold ) echo '<div class="itemSold">' . sprintf( __( '%s Sold Items', 'woocommerce' ), $units_sold ) . '</div>';
    }
    

    因为 woocommerce 没有为您的案例提供该功能

    【讨论】:

    • 虽然可以做到这一点很酷,但在每个页面加载时运行的这种查询不会减慢 OPs 网站吗?
    • 也许你可以尝试缓存我认为的查询结果
    • 如果他们必须使用这个,那么他们肯定应该使用瞬态 API。
    • 是的,我认为他们应该在这种情况下使用瞬态 API 来加快查询时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多