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

如何修改代码禁用WordPress默认搜索但保留WooCommerce产品搜索

修改后的代码实现

要实现禁用WordPress默认搜索(返回404)但保留WooCommerce产品搜索的需求,你需要在原代码基础上增加对post_type参数的判断逻辑,具体修改如下:

核心代码

function fb_filter_query( $query, $error = true ) {
    // 仅针对前台主查询,避免干扰后台及内部查询
    if ( ! is_admin() && $query->is_main_query() && is_search() ) {
        // 获取当前查询的post_type,默认值为'any'
        $current_post_type = isset( $query->query_vars['post_type'] ) ? $query->query_vars['post_type'] : 'any';
        
        // 仅当post_type不是product时,禁用搜索并返回404
        if ( $current_post_type !== 'product' ) {
            $query->is_search = false;
            $query->query_vars['s'] = false;
            $query->query['s'] = false;
            
            if ( $error ) {
                $query->is_404 = true;
            }
        }
    }
}
add_action( 'parse_query', 'fb_filter_query' );

// 替换废弃的create_function,按需控制搜索表单显示
add_filter( 'get_search_form', function( $form ) {
    // 产品搜索页面/产品归档页保留搜索表单
    if ( is_post_type_archive( 'product' ) || ( is_search() && get_query_var( 'post_type' ) === 'product' ) ) {
        return $form;
    }
    // 其他场景隐藏默认搜索表单
    return null;
} );

关键逻辑说明

  • 限定查询范围:增加!is_admin()和$query->is_main_query()判断,确保代码只作用于前台的主查询,不会影响后台操作或其他内部查询。
  • post_type判断:检查当前查询的post_type参数,仅当参数不是product时,才执行禁用搜索并设置404的操作;携带&post_type=product的搜索请求会正常执行WooCommerce产品搜索。
  • 废弃函数替换:将原代码中已被PHP 7.2+废弃的create_function替换为匿名函数,同时增加场景判断,确保产品搜索相关页面的表单正常显示。

内容的提问来源于stack exchange,提问作者user21534001

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 20:43:26