WordPress系统自带的搜索功能缺点:
不管是在前台搜索文章关键词,还是后台搜索文章关键词,搜索结果都会匹配到文章正文里面的搜索关键词。
- 这样就会导用户致搜索显示结果不精准,搜索内容不相关的内容太多,用户体验不好。
- 搜索展示结果过于太多,也会影响结果加载速度。
- 也有可能被不法分子,使用频繁搜索给服服务造成巨大压力,到达搜索攻击效果。
因为搜索是很耗费服务器资源的一件事,所以大家经常可以看到,某些站都会设置搜索时间间隔限制。
代码实现搜索只匹配文章标题的方法:
将下面的代码加入到主题下面functions.php文件中,注意是加在<?php后面,注意规范。
//WordPress搜索只匹配标题
// 原文地址https://www.yizhanzzw.com/11012.html
add_filter( 'posts_search', 'ytkah_search_by_title', 10, 2 );
function ytkah_search_by_title( $search, $wp_query ) {
if ( ! empty( $search ) && ! empty( $wp_query->query_vars['search_terms'] ) ) {
global $wpdb;
$q = $wp_query->query_vars;
$n = ! empty( $q['exact'] ) ? '' : '%';
$search = array();
foreach ( ( array ) $q['search_terms'] as $term )
$search[] = $wpdb->prepare( "$wpdb->posts.post_title LIKE %s", $n . $wpdb->esc_like( $term ) . $n );
if ( ! is_user_logged_in() )
$search[] = "$wpdb->posts.post_password = ''";
$search = ' AND ' . implode( ' AND ', $search );
}
return $search;
}
add_filter( 'posts_search', 'ytkah_search_by_title', 10, 2 );
function ytkah_search_by_title( $search, $wp_query ) {
if ( ! empty( $search ) && ! empty( $wp_query->query_vars['search_terms'] ) ) {
global $wpdb;
$q = $wp_query->query_vars;
$n = ! empty( $q['exact'] ) ? '' : '%';
$search = array();
foreach ( ( array ) $q['search_terms'] as $term )
$search[] = $wpdb->prepare( "$wpdb->posts.post_title LIKE %s", $n . $wpdb->esc_like( $term ) . $n );
if ( ! is_user_logged_in() )
$search[] = "$wpdb->posts.post_password = ''";
$search = ' AND ' . implode( ' AND ', $search );
}
return $search;
}
测试搜索结果展示(如图)
THE END
暂无评论内容