我通过几个过滤器实现了这一点:
add_filter( \'query_vars\', \'addnew_query_vars\', 10, 1 );
function addnew_query_vars($vars)
{
$vars[] = \'r\'; // var1 is the name of variable you want to add
return $vars;
}
function redir_cat_match($a) {
global $wp_query;
if ($wp_query->is_main_query() && $wp_query->is_search()){
if ($wp_query->query_vars[\'s\'] != ""){
if ($_GET[\'r\'] != \'0\'){
if (!empty($wp_query->posts[0])){
$s_value = $wp_query->query_vars[\'s\'];
$terms = get_the_terms( $wp_query->posts[0]->ID, \'product_cat\' );
$link = get_term_link($terms[0]->term_id) . "?s=" . htmlspecialchars($s_value) . "&r=0";
wp_redirect($link );
exit;
}
}
}
}
}
add_filter(\'template_redirect\',\'redir_cat_match\');
为了实现这一点,您需要某种方法让代码段检测到已发生重定向。我是通过添加变量来实现的
r
作为潜在参数。为了检索此内容,您必须使用
$_GET[\'r\']
.
我不确定这是否是最有效的方法,但它在测试期间表现良好,并获得了预期的结果。实际上,它的有效性将取决于搜索结果的质量,因此,如果您使用像SearchWP这样的插件,甚至使用ElasticSearch实现,您将获得最佳结果。