使用查询变量进行自定义重写

时间:2015-05-23 作者:Ch3n

我已经坚持了几个小时,尝试了所有这些不同的方法,但似乎都不管用。我见过其他线程有类似的问题,但解决方案不适合我。我希望有人能帮忙。

我有一个使用permalink的自定义模板页面

example.com/central
此页面接受查询变量,例如:

example.com/central/?information=people
我正在尝试使用自定义重写规则,以便在人们输入时

example.com/central/information/people
它将显示什么

example.com/central/?information=people
是的。

当前在我的模板函数中。php我有

function add_query_vars_filter( $vars ){
  $vars[] = "information";
  return $vars;
}
add_filter( \'query_vars\', \'add_query_vars_filter\' );

function custom_rewrite_tag() {
  add_rewrite_tag(\'%information%\', \'([^&]+)\');
}
add_action(\'init\', \'custom_rewrite_tag\', 10, 0);

function custom_rewrite()
{
        add_rewrite_rule(\'^(.+)/information/(.+)/?$\',\'index.php?p=64476&information=$matches[2]\',\'top\');
}
add_action(\'init\', \'custom_rewrite\');
当我访问时

example.com/central/information/people 
我只是喜欢

example.com/central/
我的第二个问题是p=64476是硬编码的,如何从$匹配中获取id?

2 个回复
SO网友:Milo

Add a rewrite endpoint 而不是重写规则和查询变量。此API函数将为您完成这两件事。

function wpd_add_my_endpoint(){
    add_rewrite_endpoint( \'information\', EP_PAGES );
}
add_action( \'init\', \'wpd_add_my_endpoint\' );
现在任何页面都可以information 附加到末尾,该值将通过get_query_var(\'information\').

SO网友:David Labbe

试试这个,我做了一个快速测试,它对我有效。我创建了一个名为central.

插入此代码后,不要忘记刷新重写规则

add_filter( \'query_vars\', \'information_query_vars\' );
function information_query_vars( $vars )
{
    array_push($vars, \'information\');
    return $vars;
}

add_action( \'rewrite_rules_array\', \'information_rewrite_rules\' );
function information_rewrite_rules( $rules )
{
    $newrules = array();
    $newrules[ \'central/information/people/?$\' ] = \'index.php?pagename=central&information=people\';

    return $newrules + $rules;
}

结束

相关推荐

Dynamic Custom Permalinks

我有一个场景,其目的是创建可以动态更改的自定义永久链接,例如:如果显示国家信息,则URL应为http://example.com/country-information如果显示特定国家的城市信息,则URL应如下所示http://example.com/country/city-information. 我怎样才能做到这一点?