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

WooCommerce账户页面订单编号过滤功能异常求助

问题原因

你的代码无法生效的核心原因是:WooCommerce的订单编号(如WC-123)不等于订单的Post ID。你用post__in传入订单编号,相当于在找Post ID等于该编号的订单,自然匹配不到任何结果。

正确解决方案

要通过订单编号筛选「我的账户」页面的订单,需要通过WooCommerce存储订单编号的自定义字段_order_number来构建查询,同时要确保只查询当前登录用户的订单,避免越权访问。修改后的代码如下:

add_filter( 'woocommerce_my_account_my_orders_query', 'custom_woocommerce_my_account_my_orders_query', 10, 1 );
function custom_woocommerce_my_account_my_orders_query( $query_args ) {
    // 检查搜索参数是否存在且不为空
    if ( isset( $_GET['ordernumber'] ) && ! empty( sanitize_text_field( $_GET['ordernumber'] ) ) ) {
        $order_number = sanitize_text_field( $_GET['ordernumber'] );
        
        // 添加meta查询匹配订单编号
        $query_args['meta_query'] = array(
            array(
                'key'     => '_order_number',
                'value'   => $order_number,
                'compare' => '=',
            )
        );
    }
    
    return $query_args;
}
关键说明
  • 安全处理:用sanitize_text_field清理用户输入,防止恶意代码注入。
  • 字段匹配:WooCommerce默认将订单编号存在_order_number自定义字段中,如果你的站点用了第三方插件自定义订单编号,需要确认对应的meta键(可通过数据库wp_postmeta表查询)。
  • 用户权限:原查询的customer_id参数会被保留,确保只会显示当前登录用户的匹配订单,不会泄露其他用户的订单数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 00:53:16