wordpress站内搜索代码怎么写
WordPress站内搜索功能默认就是内搜个“能用但不好用”的状态。你输入关键词,索代它给你返回一堆按时间排序的码写文章,相关性几乎为零。内搜更烦人的索代是,它连页面、码写产品、内搜自定义文章类型都得你手动去查代码才能搜到。索代直接改搜索逻辑,码写比装插件靠谱得多。内搜 先看最基础的索代改造——把搜索范围扩展到自定义文章类型。默认的码写搜索只查post和page,你在functions.php里加一行钩子就行: 这段代码的意思很直白:当有人在站内搜索时,把post_type参数改成你指定的索代类型。我自己的码写作品集网站就是这么干的,不然客户搜“品牌设计”永远只能看到博客文章,看不到作品页面。 但光扩展范围还不够。默认搜索用的是MySQL的LIKE模糊匹配,搜“苹果手机”会把“苹果”和“手机”拆开找,结果返回一堆无关内容。这时候得让搜索更“聪明”一点——用关键词分组匹配。比如用户输入“红色跑鞋”,你就得找同时包含“红色”和“跑鞋”的文章,而不是只含其中一个词的。 这代码把每个词都用AND连接,强制要求所有关键词都出现在标题或内容里。实际测试下来,搜“2024 设计趋势”能精准排除那些只讲“2023趋势”的旧文章。不过要注意,词越多条件越严,可能会漏掉部分结果——这是精确度与召回率的取舍,你自己权衡。 还有个细节容易被忽略——搜索表单的action属性。默认的搜索表单会把请求发到站点根目录的/?s=关键词,碰到自定义页面结构复杂的站,这个URL可能被重定向规则搞乱。我习惯在主题的searchform.php里直接指定搜索页地址: 配合固定链接设置里的“自定义结构”为 /search/%postname%/ 时,搜索结果页的URL会显得更干净。当然这属于锦上添花,核心还是搜索逻辑本身。 最后提一句性能问题。如果你站点文章超过几万篇,上面那些SQL LIKE查询会拖慢速度。这时候别硬扛,去装个Elasticsearch插件(比如ElasticPress),或者用第三方搜索服务(比如Algolia)。但中小型站点,把上面代码复制进子主题的functions.php里,效果立竿见影。我这么干三年了,没出过幺蛾子。function search_all_post_types( $query ) { if ( $query->is_search && !is_admin() ) { $query->set( 'post_type',内搜 array( 'post', 'page', 'product', 'portfolio' ) ); } return $query; } add_filter( 'pre_get_posts', 'search_all_post_types' ); function advanced_search_query( $search, $wp_query ) { if ( $wp_query->is_search() && !is_admin() ) { global $wpdb; $q = $wp_query->query_vars; $n = !empty( $q['exact'] ) ? '' : '%'; $search = ''; if ( isset( $q['s'] ) ) { $terms = preg_split( '/\s+/', trim( $q['s'] ) ); foreach ( $terms as $term ) { $like = $n . $wpdb->esc_like( $term ) . $n; $search .= $wpdb->prepare( " AND ($wpdb->posts.post_title LIKE %s OR $wpdb->posts.post_content LIKE %s)", $like, $like ); } if ( count( $terms ) > 1 ) { $search = preg_replace( '/^ AND/', '', $search ); } } } return $search; } add_filter( 'posts_search', 'advanced_search_query' ); <form role="search" method="get" id="searchform" action="<?php echo home_url( '/search/' ); ?>"> <input type="text" value="<?php echo get_search_query(); ?>" name="s" id="s" placeholder="输入关键词..." /> <button type="submit">搜索</button> </form>
-
上一篇
-
下一篇
- 随机阅读
- 搜索
-
- 友情链接
-