如何在WordPress现有侧边栏搜索中添加用户/供应商自定义属性搜索
解决方案
步骤1:确认复选框参数可正常提交
先检查你新增的两个复选框是否符合以下规范,确保搜索时参数能被正常传递:
<label><input type="checkbox" name="vendor_type[]" value="individual"> 个人供应商</label> <label><input type="checkbox" name="vendor_type[]" value="Pro"> 专业供应商</label>
- 确保两个复选框的
name属性为数组格式vendor_type[],只要你原来的ajax搜索逻辑是用serialize()方法序列化表单参数,新增的参数会自动被带入请求,不需要额外修改前端JS。
步骤2:添加搜索查询过滤逻辑
将以下代码添加到子主题的functions.php文件中,即可让复选框参数生效:
add_action('pre_get_posts', 'filter_products_by_vendor_type'); function filter_products_by_vendor_type($query) { // 仅对前台产品搜索主查询生效 if (!is_admin() && $query->is_main_query() && (is_search() || $query->get('s')) && $query->get('post_type') === 'product') { // 检查是否有提交供应商类型参数 if (isset($_GET['vendor_type']) && is_array($_GET['vendor_type']) && !empty($_GET['vendor_type'])) { // sanitize 输入参数 $selected_types = array_map('sanitize_text_field', $_GET['vendor_type']); // 查询符合所选类型的供应商ID $vendor_ids = get_users([ 'meta_key' => 'vendor_type', // 此处替换为你数据库中存储供应商类型的实际meta_key 'meta_value' => $selected_types, 'meta_compare' => 'IN', 'fields' => 'ID' ]); // 限制搜索结果仅为所选供应商发布的产品 if (!empty($vendor_ids)) { $query->set('author__in', $vendor_ids); } else { // 没有匹配的供应商时返回空结果 $query->set('post__in', [0]); } } // 未勾选任何供应商类型时不做限制,默认返回全部结果,无需额外处理 } }
注意事项
- 代码中的
vendor_type需要替换为你实际在usermeta表中存储用户供应商类型的meta键名,你之前已经查过数据库结构,直接替换成对应字段即可。 - 如果你的主题使用自定义的ajax搜索处理接口(不是走默认的WordPress主查询),只需把上述查询供应商ID、给WP_Query添加
author__in参数的逻辑,加到主题对应的ajax搜索处理函数中即可,逻辑完全一致。
内容的提问来源于stack exchange,提问作者Umer Farooq Khan
相关产品推荐
相关产品推荐

