【问题标题】:Creating a Wordpress URL Redirect创建 Wordpress URL 重定向
【发布时间】:2021-02-10 09:01:53
【问题描述】:

我在设置 Wordpress URL 重定向时遇到了一点问题。

我使用 WooCommerce 设计了一个电子商务网站,我想添加一个搜索栏,让我可以搜索商店中的过滤产品。我添加了默认的 Wordpress 搜索功能,它运行良好,但它显示了整个网站的所有类型的内容(帖子、页面、产品等)。

如果我现在搜索,网址如下:

devsite/?s=searchterm

但是,为了显示商店页面,我需要的 URL 是这样的:

devsite/?s=searchterm&post_type=product

我设法将以下代码拼凑在一起并将其放入我的functions.php 文件中。它几乎可以工作,但是,当我使用搜索词按搜索时,网站会抛出一个错误,说它被重定向了太多次。

function fb_change_search_url_rewrite() {
    if ( is_search() && ! empty( $_GET['s'] ) ) {
        wp_redirect( home_url( "?s=" ) . urlencode( get_query_var( 's' ) ) . ( "&post_type=product" ) );
        exit();
    }   
}
add_action( 'template_redirect', 'fb_change_search_url_rewrite' );

请有人解释为什么网页会抛出太多重定向错误,以及我可以做些什么来纠正这个问题。我的 PHP 知识正在增长但有限,因此我们将不胜感激。

谢谢。

【问题讨论】:

  • is_search() 将始终返回 true。您不能使用它来进行测试,因为您要转发到一个也将为 is_search() 返回 true 的页面。您正在创建一个无限循环。

标签: php wordpress url redirect


【解决方案1】:

问题出在您的 IF 条件中,您正在检查 URL 是否包含 get 参数并且 get 参数 $_GET['s'] 不为空,并且在 if 函数中您再次重定向到包含 `$_GET[ 的 URL 's'] 带有一个额外的 get 参数,即 post_type。

尝试按以下方式进行,只需添加另一个检查以检查是否未指定帖子类型,这不是最佳解决方案,但可以解决您的问题。

function fb_change_search_url_rewrite() {
    if ( is_search() && ! empty( $_GET['s'] ) && empty($_GET['post_type')) ) {
        wp_redirect( home_url( "?s=" ) . urlencode( get_query_var( 's' ) ) . ( "&post_type=product" ) );
        exit();
    }   
}
add_action( 'template_redirect', 'fb_change_search_url_rewrite' );

【讨论】:

  • 效果很好!非常感谢您抽出时间发布解决方案并解释我遇到重定向问题的原因。
  • 嗨@Pixeljack,不用担心,我很高兴能为您提供一些帮助,您能否通过单击check-mark 接受解决方案。这向更广泛的社区表明您已经找到了解决方案,并为回答者和您自己提供了一些声誉。没有义务这样做。
猜你喜欢
  • 1970-01-01
  • 2011-04-10
  • 2017-02-26
  • 1970-01-01
  • 2016-10-10
  • 2011-05-30
  • 2017-06-01
  • 2010-12-21
  • 1970-01-01
相关资源
最近更新 更多