修改WooCommerce我的账户订单页查询:共享账户订单不显示
解决WooCommerce我的账户订单页无法显示共享账户订单的问题
问题根源
woocommerce_my_account_my_orders_query过滤器传递的$args最终会传入wc_get_orders()函数,但该函数的customer_id参数仅支持单个用户ID,不接受数组值,所以直接将$shared_account_ids数组赋值给$args['customer_id']不会生效。
修复代码
function my_show_orders($args) { $user_id = get_current_user_id(); $meta_key = 'AccountNumber'; $account_number = get_user_meta($user_id, $meta_key, true); $shared_account_ids = my_function_get_users_by_meta_value($meta_key, $account_number); // 确保当前用户ID在目标数组中,避免遗漏自身订单 if (!in_array($user_id, $shared_account_ids)) { $shared_account_ids[] = $user_id; } // 通过meta_query筛选所有共享账户用户的订单 $args['meta_query'][] = array( 'key' => '_customer_user', 'value' => $shared_account_ids, 'compare' => 'IN', 'type' => 'NUMERIC' ); // 移除默认的customer_id参数,防止冲突 unset($args['customer_id']); return $args; } add_filter('woocommerce_my_account_my_orders_query', 'my_show_orders', 20);
代码说明
- 补充当前用户ID:确保
$shared_account_ids包含当前用户ID,避免用户看不到自己的订单。 - 使用meta_query替代customer_id:订单的用户ID存储在
_customer_user元字段中,通过IN操作符匹配所有共享账户的用户ID,实现多用户订单查询。 - 移除冲突参数:删除原
customer_id参数,防止默认的单个用户筛选逻辑覆盖自定义查询。
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

