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

WordPress date_query异常:WooCommerce订单统计数值不符求助

排查WooCommerce订单统计与日期筛选问题

先帮你拆解下遇到的两个核心问题,再给出针对性的修正方案:

问题1:带date_query时返回0订单

你调试输出的订单日期是2018-01-17,而代码里用了'after' => date('Y-m-d', strtotime('-90 days'))——假设当前是2024年,那90天前的日期远晚于2018年,这个订单自然不在筛选范围内,所以$customer_orders是空数组,返回0。如果你的核心需求是判断用户所有历史订单数是否为0,那完全不需要这个date_query参数;如果确实要筛选90天内的订单,得先确认订单日期是否在这个时间区间里。

问题2:移除date_query后$total显示19,但只有1条订单

这里你混淆了一个关键概念:$order->get_total()获取的是订单的总金额,不是订单数量!你循环里做的是$total += $order->get_total(),所以这个19是那单订单的金额,而不是订单数。如果要统计订单数量,直接用count($customer_orders)就可以,或者循环里做$total++。

修正后的代码

根据你的核心需求「判断用户是否注册超30天且订单数为0」,我调整了代码,解决了上述问题:

// 判断账号是否注册超指定天数
function woo_reg_matured( $days_old = 30 ) {
    $cu = wp_get_current_user();
    return isset( $cu->data->user_registered ) 
        && strtotime( $cu->data->user_registered ) < strtotime( sprintf( '-%d days', $days_old ) );
}

// 短代码:判断用户活跃状态
function woo_inactive_shortcode( $atts = array(), $content = '' ) {
    if ( !is_user_logged_in() ) return ''; // 未登录直接返回空

    // 获取用户所有已完成订单(如果要加日期筛选,再调整date_query)
    $customer_orders = get_posts( array(
        'numberposts' => -1,
        'meta_key'    => '_customer_user',
        'meta_value'  => get_current_user_id(),
        'post_type'   => 'shop_order',
        'post_status' => 'wc-completed'
    ) );

    $order_count = count( $customer_orders ); // 统计订单数量
    echo 'Orders: ' . $order_count . '<br>';

    if ( $order_count === 0 ) { // 订单数为0时判断注册时长
        if( woo_reg_matured( 30 ) ) {
            echo 'You are inactive with ' . $order_count . ' orders and account age over 30 days';
        } else {
            echo 'You are inactive with ' . $order_count . ' orders and account age under 30 days';
        }
    } else {
        echo 'You are active with over 30 days age and ' . $order_count . ' orders';
    }
}
add_shortcode( 'woo_inactive', 'woo_inactive_shortcode' );

额外说明

  • 如果你的需求是判断「90天内订单数为0且注册超30天」,那重新加date_query时要注意逻辑:比如要先确认用户最近的订单日期是否早于90天前,而不是简单筛选订单。
  • 用count($customer_orders)比循环计数更高效,直接获取数组长度即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:31:51