带有URL中变量的自定义页面。带有添加_重写_规则的漂亮URL

时间:2011-03-24 作者:ide79

使用WP3。1.

我有一个带有WP\\u查询的自定义页面,该查询从url获取动态变量。我想要安全的变量和干净的URL。

示例:

车位/?carmodel=本田;地点=芬兰

carpage/本田/芬兰/

我在函数中创建了add\\u rewrite\\u规则。php和它的工作,但我不确定它是安全的使用这个。

功能。php

  function fcars() {

  add_rewrite_rule(\'carpage/[/]?([a-zA-Z-]*)[/]?([a-zA-Z-]*)$\', \'index.php?pagename=carpage&var1=$matches[1]&var2=$matches[2]\');

  add_rewrite_tag(\'%var1%\', \'[a-zA-Z]+\');
  add_rewrite_tag(\'%var2%\', \'[a-zA-Z]+\');
}

add_action(\'init\', \'fcars\');
在自定义模板中,我得到了变量

谁能帮我一下吗。我如何才能使其安全使用,这在WP3中是正确的方法吗。1.

在这种情况下,创建add\\u rewrite\\u规则的正确方法是什么:

carpage/本田/芬兰/

(url中只有连字符和小写字母)carpage是静态模板页面。

1 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

我认为add_rewrite_tag() 不需要,可以替换为直接将变量添加到公共查询变量:

// Either directly (in your init hook):
$wp->add_query_var( \'var1\' );
$wp->add_query_var( \'var2\' );

// Or via a filter:
add_filter( \'query_vars\', \'wpse12965_query_vars\' );
function wpse12965_query_vars( $query_vars )
{
    $query_vars[] = \'var1\';
    $query_vars[] = \'var2\';
    return $query_vars;
}
此外,您当前允许前面有一个或两个斜杠,但后面没有斜杠。我想你想把/? 到正则表达式的末尾。这个[a-zA-Z-] slug的部分有时也写为[^/] (除了斜线以外的所有东西),但在这种情况下,可能不会有什么不同。

我会这样写重写规则:

add_action( \'init\', \'wpse12065_init\' );
function wpse12065_init()
{
    add_rewrite_rule(
        \'carpage(/([^/]+))?(/([^/]+))?/?\',
        \'index.php?pagename=carpage&var1=$matches[2]&var2=$matches[4]\',
        \'top\'
    );
}
The(/([^/]+))? 使整个组都是可选的,因此/carpage, /carpage/honda/carpage/honda/finland 应该可以,末尾有一个可选的斜杠。因为我们需要一个额外的小组/, 变量在下一个捕获组中,那么$matches[1] 成为$matches[2]$matches[2] 成为$matches[4].

如果要调试重写规则,我建议my Rewrite analyzer plugin, 它允许您使用URL并查看结果查询变量。

结束

相关推荐

Changing attachment urls?

如何更改附件页URL的格式/[post-url]/[attachment-name]/ 到/media/[attachment-name]/? 我知道我可以覆盖get_attachment_link 通过attachment_link 过滤器,但我想我需要更改重定向结构,以便WordPress知道如何处理这些URL?