在 WordPress 中实现松散匹配搜索功能,可以使用 WordPress 内置的函数 get_posts()
和 pre_get_posts
进行搜索条件的修改。
首先,在 functions.php
文件中添加以下代码:
function custom_search_query($query) {
if ( !is_admin() && is_search() && $query->is_main_query() ) {
$search_query = $query->query_vars['s'];
if ( !empty($search_query) ) {
$query->set('post_type', 'post');
$query->set('s', '');
$query->set('meta_query', array(
'relation' => 'OR',
array(
'key' => 'title',
'value' => $search_query,
'compare' => 'LIKE'
),
array(
'key' => 'content',
'value' => $search_query,
'compare' => 'LIKE'
)
));
}
}
}
add_action('pre_get_posts','custom_search_query');
此代码将搜索条件修改为:搜索关键字同时匹配文章标题或文章内容中的任意一个。同时,将搜索类型修改为 post
。
在主题的搜索模板文件中,使用 WordPress 内置函数 get_posts()
进行搜索结果的输出。
<?php
global $query_string;
$query_args = explode("&", $query_string);
$search_query = array();
foreach($query_args as $key => $string) {
$query_split = explode("=", $string);
$search_query[$query_split[0]] = urldecode($query_split[1]);
}
$search = new WP_Query($search_query);
if ( $search->have_posts() ) {
while ( $search->have_posts() ) {
$search->the_post();
// 输出搜索结果
}
} else {
// 没有搜索结果
}
?>
以上示例代码可以实现搜索关键字的松散匹配功能。同时,可以根据需要进行修改,例如,只匹配文章标题或文章内容中的一个,或者搜索类型修改为其他自定义的文章类型等。