带有查询变量的ADD_REWRITE_RULE

时间:2020-07-30 作者:Siddharth Thevaril

我们将规则改写为:

add_action( \'init\', function() {
    add_rewrite_rule( \'app-api/v2/ecommerce/([a-z0-9-]+)[/]?$\', \'index.php?p=$matches[1]&post_type=product\' );
} );
对于URL-www.domain.com/app-api/v2/ecommerce/14. 我们使用加载自定义模板template_include 自定义规则的挂钩。

上述方法很好,但由于某些特定原因,客户机希望使用查询变量,以便新URL的格式www.domain.com/app-api/v2/ecommerce?pid=14

我试图实现的是这样的目标,但这是行不通的。

add_action( \'init\', function() {
   $id = $_GET[\'pid\'];
   add_rewrite_rule( \'app-api/v2/ecommerce\', "index.php?p={$id}&post_type=product" );
} );
使用动态查询变量添加重写规则的正确方法是什么?

2 个回复
SO网友:Andrzej Misiewicz

首先,您的代码不起作用,因为需要刷新重写规则(函数flush\\u rewrite\\u rules),并且每更改一次$id都需要刷新规则。一般来说,出于性能原因,这是一个非常糟糕的主意。

您应该只使用post\\u type=product添加重写规则,因为您想通过;p“;作为$\\u GET参数

add_rewrite_rule( \'app-api/v2/ecommerce\', "index.php?post_type=product" );

然后在template\\u include hook函数中查找$\\u GET[\'pid\'],并根据它选择模板

希望有帮助

SO网友:mozboz

从你想做的事情来看,听起来目标URL没有改变,但是你想从中重写的URL的格式已经改变了,对吗?

URL如下所示:

www.domain.com/app-api/v2/ecommerce/14

现在应该如下所示:

www.domain.com/app-api/v2/ecommerce?pid=14

如果是这样的话,为什么不将原来的重写规则(如果有效的话)的格式稍微更改为:

add_rewrite_rule( \'app-api/v2/ecommerce?pid=([a-z0-9-]+)[/]?$\', \'index.php?p=$matches[1]&post_type=product\' );

相关推荐