在维护搜索查询参数的同时重定向至页面,而不会导致无限循环

时间:2020-09-25 作者:fudge

我们正在使用XforWoocommerce提供的名为Product Filter的插件。它有一个功能,可以根据可见的产品限制可用的产品过滤器选项,但是,它不适用于搜索查询。我没有尝试进行可能难以维护的大型自定义编辑,而是提出了以下解决方案:

任何时候进行搜索查询时,都会重定向到与大多数结果匹配的主产品类别页面。

1 个回复
SO网友:fudge

我通过几个过滤器实现了这一点:

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实现,您将获得最佳结果。