Rewriting WordPress URLs

时间:2013-05-31 作者:Evertiro

我有一个插件,它通过一个短代码通过GET请求获取输入。快捷码放在带有地址/搜索的页面上,用于执行此特定搜索的查询是/搜索/?VenuName=。这很好用。但是,我需要重写它,以便当用户转到/地点/时,它加载上述搜索。

This gist 包含我的原始代码(失败),以及Pippin关于我应该在哪里的建议(也失败)。我已经尝试了我能想到的一切,它总是导致404错误,或者重定向到主页(这毫无意义)。我还尝试了通过Rewrite plugin, 结果是一样的。

如果您能提供任何帮助,我们将不胜感激。不幸的是,我在这个项目的最后期限,所以我有点紧张。这件作品是首次软启动之前需要的最后一件大事,预计将在36小时内完成。

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

您的重写规则与Pippin提供的规则之间的第一个重要区别是,他的所有重写规则都指向index.php. 这是绝对必须的,您无法以任何其他方式使用它,所有请求都必须指向index.php 附加查询变量。

第二个需要注意的重要事项是重写必须查询某种类型的WordPress对象。每个请求都会运行一个主查询、一个页面、一篇文章、一个类别等。。

解决此问题的最简单方法是让管理员用户选择一个页面作为搜索页面,然后将重写指向该页面,并附加额外的查询变量:

function tn_rewrite_urls() {
    add_rewrite_rule(
        \'venue/([^/]+)/?\',
        \'index.php?pagename=SELECTED_PAGE&venueName=$matches[1]\',
        \'top\'
    );
}
add_action( \'init\', \'tn_rewrite_urls\' );

function tn_query_vars( $query_vars ) {
    $query_vars[] = \'venueName\';
    return $query_vars;
}
add_filter( \'query_vars\', \'tn_query_vars\' );
在本例中,您可以交换SELECTED_PAGE 无论所选的页面slug是什么。此外,不要忘记将查询变量添加到查询变量数组,并确保在添加新规则后刷新重写。

结束

相关推荐