我创建了一个页面(页面ID235
) 使用需要传递变量的页面模板。我想通过URL传递这个变量。我的第一次尝试是用一个GET变量来传递它,效果很好。
URL: http://example.com/sok/events/?kategori=variablehere
现在,我想我应该给它加点香料并美化一下。这就是我的目标:
URL: http://example.com/sok/events/variablehere
我在尝试中使用的代码如下所示:
function setup_filter_rewrites()
{
add_rewrite_tag(\'%kategori%\',\'([^&]+)\');
add_rewrite_rule(\'^sok/events/([^/]*)/?\', \'index.php?p=235&kategori=$matches[1]\', \'top\');
}
add_action( \'init\', \'setup_filter_rewrites\' );
现在,当访问上面的URL时,我被重定向到
http://example.com/sok/events/
- i、 e.URL,但不带查询变量。显然,正如您可能猜测的那样,查询变量在页面内是不可访问的。
我听说了redirect_canonical
函数可能会导致重写规则出现问题,因此我禁用了它。这样做之后,访问上面的URL会生成404。php请求。
正如您所看到的,我确实试图减少代码,使其尽可能简单,并使用正确的API函数。我已经检查了规则A tool to analyze rewrite rules? 它将变量报告为公共的和可访问的。我试着把这一页裁剪成一个简单的echo $wp_query->query_vars[\'kategori\']
但这没有输出任何内容,也没有阻止重定向。
我怀疑重定向是这里的问题所在-如果我能阻止它,我相信我能够获取查询变量。
此问题类似于URL Rewrite + Page + Custom Post Type = Unusual Redirect 和Querystring parameter getting lost in rewrite rule 到目前为止,这也是一个重定向错误。然而,在我的情况下,我没有处理任何类型的自定义帖子。
最合适的回答,由SO网友:Milo 整理而成
我想你只需要补充一下kategori
到查询变量数组:
EDIT- 经过多次迭代,我们终于找到了一个解决方案。原始代码似乎正常工作,但只使用特定的永久链接设置,因为我被错误地路由到帖子而不是页面。而不是p=
, 应该是这样的pagename=
, 路径中同时包含父页和子页:
function setup_filter_rewrites()
{
add_rewrite_rule(\'sok/events/([^/]*)/?\', \'index.php?pagename=sok/events&kategori=$matches[1]\', \'top\');
}
add_action( \'init\', \'setup_filter_rewrites\' );
function setup_filter_query_vars( $query_vars )
{
$query_vars[] = \'kategori\';
return $query_vars;
}
add_filter( \'query_vars\', \'setup_filter_query_vars\' );