首页 问答 正文

如何在WordPress中实现松散匹配搜索功能?

注册会员 / 悠然自学 / 2023-06-12/ 浏览 152 次

在 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 {
  // 没有搜索结果
}
?> 

以上示例代码可以实现搜索关键字的松散匹配功能。同时,可以根据需要进行修改,例如,只匹配文章标题或文章内容中的一个,或者搜索类型修改为其他自定义的文章类型等。

大家谈论
    我的见解