查询字符串参数在重写规则中丢失

时间:2011-08-21 作者:Rebecca Chernoff

我已经成功地添加了一个自定义的帖子类型,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.

confirmed in rewrite analyzer

所以,从这里开始,我认为这是一帆风顺的,对吗?是 啊不完全是这样。

当我加载我的站点并转到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。这似乎表明重写规则工作不正常。然而,重写分析器插件似乎表明,我的目标设置正确。

我有点困惑,我应该在这里看什么来修复断开连接。抱歉,如果我遗漏了一些明显的东西。):

1 个回复
SO网友:chrisguitarguy

我想问题可能出在你的前端代码上。

试试这个:

<?php
if( $letter = get_query_var( \'letter\' ) ) 
{
        echo \'Current Letter: \' . $letter;
}
else
{
        echo \'Current Letter: All\';
}

结束

相关推荐