You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce商品指定时段销量统计PHP代码异常排查求助

问题排查:WooCommerce销量统计PHP代码返回空值

问题背景

开发用于统计WooCommerce指定时段商品销量的函数,目标是向Google Merchant提交准确数据。在phpMyAdmin中执行MySQL查询可正常返回结果28,但转为PHP代码后始终返回空值。

原可正常运行的SQL语句

SELECT COUNT(product_id) 
FROM wp_wc_order_product_lookup 
WHERE product_id = 4098995 
  AND date_created < '2025-02-11' 
  AND date_created > '2017-02-11' 
LIMIT 50

问题代码中的核心错误

1. $wpdb->prepare 用法完全错误

SQL语句中未使用任何占位符(如%d、%s),却向prepare方法传递了$product_id、$date_from、$date_to三个参数,导致prepare执行失败,生成无效SQL,最终get_var返回空值。

2. 自定义表名调用错误

$wpdb->wp_wc_order_product_lookup是错误写法,$wpdb的属性仅适用于WordPress默认表(如$wpdb->posts、$wpdb->postmeta)。WooCommerce自定义表需用$wpdb->prefix拼接表名,兼容不同数据库前缀设置。

3. 日期变量逻辑颠倒且未复用

代码中定义了$date_to(过去日期)和$date_from(当前日期),但SQL中硬编码了固定日期,未使用变量;同时统计逻辑应为过去到当前的销量,对应date_created >= $date_to且date_created <= $date_from。

4. 硬编码值覆盖动态变量

先通过SKU查询获取$product_id,随后用$product_id = 4098995硬编码覆盖,导致动态获取的ID无效;SQL中直接写死日期,未复用已定义的日期变量。

修复后的完整代码

global $wpdb;

// 假设$sku和$sex为已定义的变量
$sku = $sku . $sex;

// 通过SKU获取商品ID
$product_id = $wpdb->get_var( 
    $wpdb->prepare( 
        "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key='_sku' AND meta_value=%s LIMIT 1", 
        $sku 
    ) 
);

// 定义统计时段:最近96个月到今天
$date_to = date("Y-m-d", strtotime('-96 months'));
$date_from = date("Y-m-d");

// 获取WooCommerce内置总销量(用于对比)
$total_sales = get_post_meta($product_id, 'total_sales', true);

echo "总销量 ". $total_sales . " | 商品ID ". $product_id. " | 统计时段:". $date_to . " 至 ". $date_from;

// 正确的时段销量统计查询
$sales_count = $wpdb->get_var( 
    $wpdb->prepare( 
        "SELECT COUNT(product_id) FROM {$wpdb->prefix}wc_order_product_lookup 
         WHERE product_id = %d 
           AND date_created >= %s 
           AND date_created <= %s", 
        $product_id, 
        $date_to, 
        $date_from 
    ) 
);

echo " 时段销量统计:" . $sales_count;

验证建议

  1. 开启WordPress调试模式(在wp-config.php中设置define('WP_DEBUG', true);),查看数据库错误提示
  2. 用echo $wpdb->last_query;打印最终生成的SQL语句,复制到phpMyAdmin中执行,验证语句正确性

内容的提问来源于stack exchange,提问作者Vito Santimone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 11:28:28