在WooCommerce的wc-orders新建页与wc-users页实现手机号搜索用户
WooCommerce手机号搜索用户实现方案(适配新建订单+用户列表页)
一、用户列表页(wp-admin/users.php)搜索修复
之前的代码出错大概率是未限制生效范围或SQL拼接不当,以下代码仅在用户列表页生效,兼容WooCommerce默认账单手机号字段:
add_action('pre_user_query', 'phone_search_for_users_list'); function phone_search_for_users_list($query) { global $pagenow; // 仅在用户列表页且存在搜索关键词时触发 if ($pagenow !== 'users.php' || empty($_GET['s'])) { return; } $search_term = sanitize_text_field($_GET['s']); $meta_query = $query->query_vars['meta_query'] ?? []; // 添加账单手机号搜索条件(字段名可根据实际修改) $meta_query[] = [ 'key' => 'billing_phone', 'value' => $search_term, 'compare' => 'LIKE' ]; $query->query_vars['meta_query'] = $meta_query; // 合并搜索逻辑,让手机号与用户名/邮箱等一同参与搜索 $original_search = $query->search_clause; $query->search_clause = $original_search . " OR (user_meta.meta_value LIKE '%{$search_term}%' AND user_meta.meta_key = 'billing_phone')"; }
二、新建订单页(wp-admin/admin.php?page=wc-orders&action=new)搜索实现
新建订单页的用户搜索是AJAX请求,需通过WooCommerce专属钩子修改查询逻辑:
add_filter('woocommerce_ajax_search_users_query', 'phone_search_for_new_order'); function phone_search_for_new_order($query_args, $search_term) { // 仅针对新建订单页的用户搜索AJAX请求生效 if ($_POST['action'] !== 'woocommerce_json_search_users') { return $query_args; } $phone_meta_query = [ 'relation' => 'OR', [ 'key' => 'billing_phone', 'value' => $search_term, 'compare' => 'LIKE' ] ]; // 合并到原有查询条件中 if (!empty($query_args['meta_query'])) { $query_args['meta_query']['relation'] = 'OR'; $query_args['meta_query'] = array_merge($query_args['meta_query'], $phone_meta_query); } else { $query_args['meta_query'] = $phone_meta_query; } return $query_args; }
注意事项
- 如果你的站点使用自定义手机号字段(而非WooCommerce默认的
billing_phone),请将代码中的billing_phone替换为实际的meta_key。 - 代码可添加至主题的
functions.php文件,或使用Code Snippets插件导入(更安全,避免主题更新丢失)。 - 测试时输入完整/部分手机号,即可匹配到对应用户。
内容的提问来源于stack exchange,提问作者javitoor1001
相关产品推荐
相关产品推荐

