WordPress后台搜索设置:让文章类型仅在专属区域搜索
WordPress后台搜索限制对应文章类型,前台全局搜索实现方案
你的需求可以通过修改现有搜索函数,区分前台与后台场景,并针对后台搜索匹配当前页面的文章类型来实现。
修改后的函数代码
function ScanWPostFilter($query) { // 仅处理主查询的搜索请求 if ($query->is_search && $query->is_main_query()) { // 前台搜索:保留全局搜索所有指定类型 if (!is_admin()) { $query->set('post_type', array('post','product','recipe', 'page')); $query->set('orderby', array('relevance' => 'DESC', 'type' => 'ASC')); } // 后台搜索:限制为当前页面对应的文章类型 else { // 获取当前页面的目标文章类型(比如文章列表页的post,Recipe列表页的recipe) $current_post_type = $query->get('post_type'); // 如果有明确的文章类型参数,就只搜该类型;没有则保持默认(比如后台顶部全局搜索,可按需调整) if (!empty($current_post_type)) { $query->set('post_type', $current_post_type); } // 后台搜索排序可按需保留或调整 $query->set('orderby', array('relevance' => 'DESC', 'type' => 'ASC')); } } return $query; } add_filter('pre_get_posts','ScanWPostFilter');
关键逻辑说明
- 区分前后台:通过
is_admin()判断当前环境,前台保持原有的全局搜索逻辑,后台单独处理。 - 后台匹配对应类型:后台文章列表页的搜索请求中,
$query->get('post_type')会返回当前页面的文章类型(比如在Recipe列表页搜索时,这个值就是recipe),以此限制搜索范围。 - 仅处理主查询:加入
$query->is_main_query()避免影响后台其他非搜索相关的查询逻辑。 - 可选调整:如果希望后台顶部的全局搜索也限制为单一类型,可移除
if (!empty($current_post_type))的判断,但通常默认保留后台全局搜索的灵活性更实用。
内容的提问来源于stack exchange,提问作者Dannie
相关产品推荐
相关产品推荐

