我已经成功地添加了一个自定义的帖子类型,permalink结构非常有效。例如,我有一个自定义的帖子类型books
, 书的永久链接是/books/the-dictionary
.
我的single-book.php
页面模板接受letter
参数自定义页面上显示的内容。我希望能够像这样链接到/book/the-dictionary/q
.
我在我的主题函数中添加了以下内容。php文件:
function my_init() {
add_books_rewrite();
function add_books_rewrite() {
add_rewrite_rule("books/([^/]+)/([^/])/?$", \'index.php?pagename=$matches[1]&letter=$matches[2]\', "top");
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
function add_books_query_vars($query_vars) {
$query_vars[] = "letter";
return $query_vars;
}
add_filter("init", "my_init");
add_filter("query_vars", "add_books_query_vars");
使用上面的刷新代码,手动转到permalink设置页面并保存,以及修复regex中的愚蠢错误,都进行了一些尝试,但最终我能够通过使用
Jan Fabry\'s 极好的
rewrite analyzer plugin.
所以,从这里开始,我认为这是一帆风顺的,对吗?是 啊不完全是这样。
当我加载我的站点并转到books/the-dictionary/q
, 它确实加载the-dictionary
内容正确,但正在丢失参数。我发现有趣的是,如果我加载index.php?pagename=the-dictionary&letter=q
, 一切都很好。
要检索参数,我有以下代码:
global $letter;
echo $letter. " - global";
echo "<br>";
$current_letter = (isset($wp_query->query_vars["letter"]) ? $wp_query->query_vars["letter"] : "all");
echo $current_letter . " - query_vars";
echo "<br><br>";
我也一直在看
$_SERVER["QUERY_STRING"]
. 当我使用
index.php?pagename...&letter...
, 但当我使用
/books/pagename/letter
.
所以,这里似乎发生了一些事情。WordPress并没有完全删除该参数,因为如果我指定索引,一切都会正常。带有适当querystring变量的php。这似乎表明重写规则工作不正常。然而,重写分析器插件似乎表明,我的目标设置正确。
我有点困惑,我应该在这里看什么来修复断开连接。抱歉,如果我遗漏了一些明显的东西。):