REWRITE_RULE()不保留查询字符串

时间:2013-03-29 作者:JCL1178

我们在站点中添加了一个自定义的rewrite\\u规则,以允许正确解析和处理漂亮的入站链接。链接构造为domain.com/meetings/faculty/someIDnumber

add_action( "init", "pleasing_permalinks" );
function pleasing_permalinks() {
    add_rewrite_tag( \'%hash%\', \'([^&]+)\' );
    add_rewrite_rule(
        \'meetings/faculty/([^/]+)/?$\',
        \'index.php?p=1598&hash=$matches[1]\',
        \'top\'
    );
    //flush_rewrite_rules();
}
Rewrite Analyzer 同意上述内容,但当我们在浏览器中使用实际链接进行测试时,不会保留嵌入的ID号。我们错过了什么?

3 个回复
最合适的回答,由SO网友:Milo 整理而成

如果faculty 是的子页meetings, 规则应为:

add_rewrite_rule(
    \'meetings/faculty/([^/]+)/?$\',
    \'index.php?pagename=meetings/faculty&hash=$matches[1]\',
    \'top\'
);
pagename=meetings/faculty 而不是p=1598

编辑-或交替:

add_rewrite_rule(
    \'meetings/faculty/([^/]+)/?$\',
    \'index.php?page_id=1598&hash=$matches[1]\',
    \'top\'
);
page_id=1598 而不是p=1598

SO网友:Tom J Nowell

您是否尝试过使用第一个索引而不是第二个索引?

\'index.php?p=1598&hash=$matches[0]\',
PHP中的数组从0开始,而不是从1开始

SO网友:Kim

刚刚在干净的WP安装上测试了您的代码,并能够通过以下方式获得变量:

echo $wp_query->query_vars[\'hash\'];
Wordpress Codex-add_rewrite_tag:
请注意,即使重写包含querystring变量,在重写的URL上使用$\\u GET也不会起作用。您必须使用$wp\\U查询。

编辑:如正确答案中所述,“p”必须替换为“page\\u id”,以便在重定向到“page”类型的帖子时能够保留变量。

结束

相关推荐