You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 09:23:11