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
相关产品推荐
相关产品推荐

