因此,我正在尝试设置一个搜索表单,其中实际搜索的词与用户输入的词不同。具体来说,我需要删除搜索词中的任何破折号。例如,假设用户输入“7-18”。搜索实际需要查询的是“718”。我在想
pre_get_posts
也许是一种方式,但我不知道如何去写它。类似于
function alter_query($query) {
$unedit = the_search_query();
$edited = str_replace("-","",$unedit);
the_search_query() = $edited;
}
add_action(\'pre_get_posts\',\'alter_query\');
获取输入的值,删除破折号,并在搜索表单中的新搜索查询中使用它。但它不起作用,我不知道这是因为不能用php设置\\u search\\u query(),还是因为它形成了一个循环,或者是因为其他原因。有什么想法?
SO网友:Johansson
这个pre_get_posts
过滤器是正确的选择。您可以检查您是否在搜索查询中,并根据需要对其进行更改。下面是一个示例:
function search_filter($query) {
if ( !is_admin() && $query->is_main_query() ) {
// Check if we are on a search page
if ($query->is_search) {
// Get the search query
$search_term = get_search_query();
// You can modify the search query here, and pass it to the query again.
$search_term = str_replace( "-", "" , $search_term );
$query->set( \'s\', $search_term );
}
}
}
add_action(\'pre_get_posts\',\'search_filter\');