如何修改代码禁用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
相关产品推荐
相关产品推荐

