自定义WordPress搜索结果页面显示404错误排查
解决WordPress自定义博客搜索结果页跳404的问题
你当前的自定义搜索表单和URL重定向逻辑存在几个关键问题,导致目标URL无法正常解析,直接跳转到404页面。以下是针对性的修复方案:
问题排查与修复步骤
1. 修复重定向函数的语法错误
原代码中wpb_change_search_url函数开头多了一个斜杠/,导致函数无法被WordPress正确加载执行,这是触发404的基础原因之一,直接删除该斜杠即可。
2. 修正重定向逻辑,保留必要参数
原重定向代码只拼接了搜索关键词s,丢失了post_type参数,WordPress无法识别要搜索的内容类型,因此返回404。需要在重定向时完整保留post_type参数。
3. 确保WordPress识别/blog/search/路径
如果/blog/search/不是后台创建的实际页面,需要添加重写规则,让WordPress将该路径解析为合法的搜索请求。
修正后的完整代码
// 自定义博客搜索表单 function blog_search_form( $blog_form ) { $blog_form = ' <form class="form-inline" id="search" action="'.home_url( "/blog/search/" ).'" method="get"> <div class="form-group mx-sm-1 mb-2 w-100"> <input type="hidden" name="post_type" value="post" /> <input class="form-control w-100" id="s" name="s" type="text" placeholder="Search blog" value="'. get_query_var('s') .'" required /> </div> <input id="searchsubmit" class="main-btn btn mb-2" type="submit" value="Search" /> </form>'; return $blog_form; } add_filter( 'get_search_form', 'blog_search_form' ); // 修改搜索URL并重定向 function wpb_change_search_url() { if ( is_search() && ! empty( $_GET['s'] ) ) { // 保留post_type参数,拼接完整搜索URL $post_type = isset( $_GET['post_type'] ) ? $_GET['post_type'] : 'post'; $redirect_url = home_url( "/blog/search/" ) . '?post_type=' . urlencode( $post_type ) . '&s=' . urlencode( get_query_var( 's' ) ); wp_redirect( $redirect_url ); exit(); } } add_action( 'template_redirect', 'wpb_change_search_url' ); // 可选:添加重写规则(若/blog/search/不是后台创建的页面) function custom_search_rewrite_rule() { add_rewrite_rule( 'blog/search/?$', 'index.php?s=$matches[1]&post_type=post', 'top' ); } add_action( 'init', 'custom_search_rewrite_rule' );
最后一步:刷新重写规则
修改代码后,进入WordPress后台「设置-固定链接」页面,无需修改任何设置,直接点击「保存更改」,让WordPress刷新重写规则,确保新的配置生效。
内容的提问来源于stack exchange,提问作者Fear
相关产品推荐
相关产品推荐

