您现在的位置是:综合 >>正文
wordpress站内搜索代码怎么写
综合31人已围观
简介WordPress站内搜索功能默认就是个“能用但不好用”的状态。你输入关键词,它给你返回一堆按时间排序的文章,相关性几乎为零。更烦人的是,它连页面、产品、自定义文章类型都得你手动去查代码才能搜到。直接 ...
WordPress站内搜索功能默认就是内搜个“能用但不好用”的状态。你输入关键词,索代它给你返回一堆按时间排序的码写文章,相关性几乎为零。内搜更烦人的索代是,它连页面、码写产品、内搜自定义文章类型都得你手动去查代码才能搜到。索代直接改搜索逻辑,码写比装插件靠谱得多。内搜
先看最基础的索代改造——把搜索范围扩展到自定义文章类型。默认的码写搜索只查post和page,你在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' ); 这段代码的意思很直白:当有人在站内搜索时,把post_type参数改成你指定的索代类型。我自己的码写作品集网站就是这么干的,不然客户搜“品牌设计”永远只能看到博客文章,看不到作品页面。
但光扩展范围还不够。默认搜索用的是MySQL的LIKE模糊匹配,搜“苹果手机”会把“苹果”和“手机”拆开找,结果返回一堆无关内容。这时候得让搜索更“聪明”一点——用关键词分组匹配。比如用户输入“红色跑鞋”,你就得找同时包含“红色”和“跑鞋”的文章,而不是只含其中一个词的。
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' ); 这代码把每个词都用AND连接,强制要求所有关键词都出现在标题或内容里。实际测试下来,搜“2024 设计趋势”能精准排除那些只讲“2023趋势”的旧文章。不过要注意,词越多条件越严,可能会漏掉部分结果——这是精确度与召回率的取舍,你自己权衡。
还有个细节容易被忽略——搜索表单的action属性。默认的搜索表单会把请求发到站点根目录的/?s=关键词,碰到自定义页面结构复杂的站,这个URL可能被重定向规则搞乱。我习惯在主题的searchform.php里直接指定搜索页地址:
<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> 配合固定链接设置里的“自定义结构”为 /search/%postname%/ 时,搜索结果页的URL会显得更干净。当然这属于锦上添花,核心还是搜索逻辑本身。
最后提一句性能问题。如果你站点文章超过几万篇,上面那些SQL LIKE查询会拖慢速度。这时候别硬扛,去装个Elasticsearch插件(比如ElasticPress),或者用第三方搜索服务(比如Algolia)。但中小型站点,把上面代码复制进子主题的functions.php里,效果立竿见影。我这么干三年了,没出过幺蛾子。
Tags:
上一篇:2022个人隐私泄露案例
下一篇:正绕过滤网
相关文章
为啥石家庄工资那么低房价那么高
综合石家庄的工资条和房价牌,像是两个平行世界里的东西。去年我朋友在裕华区买了一套80平米的二手房,总价160万,首付掏空六个钱包。而他在这座城市做平面设计,月薪到手6500块——这已经算中等偏上。换算一下 ...
【综合】
阅读更多票代是怎么刷机票的
综合凌晨三点,李然盯着屏幕上的航司放票倒计时,手指悬在F5键上。他不是给自己买票,手里攥着十七个客户的身份证号,全是飞法兰克福和洛杉矶的留学生。票代这行干了四年,他总结出一条铁律:官网放票的瞬间,拼的不是 ...
【综合】
阅读更多mu高端俱乐部相亲可靠吗
综合去年冬天,我一个做外贸的朋友老周,被拉进了一个叫“MU高端俱乐部”的微信群。入群门槛是验资:流动资产不低于800万,或者一线城市核心地段房产两套以上。老周刚好卡线,交了3万8的年费,进去待了四个月,退 ...
【综合】
阅读更多