对URL的解析方式感到困惑

时间:2013-08-08 作者:gaoshan88

我有一个permalink,可以生成一些自定义内容,如:

http://mysite.com/extra-deal/91103/
这将带您进入由文件处理的页面:

category-extra-deals.php
在该页面上,我获取URL的最后一部分(上例中为91103),并使用该部分对我需要的信息进行自定义数据库请求。

我想退出使用id号(91103)并开始使用标题。

但将其更改为:

http://mysite.com/extra-deal/title-of-that-entry/
结果是404和模板category-extra-deals.php 从未接触过。

我想模板会被点击,至少,即使找不到标题,但事实并非如此。

另一个示例。。。如果我访问:

http://mysite.com/extra-deal/9/
我会拿到category-extra-deals.php 模板,但没有内容,因为9不存在。

但是,使用:

http://mysite.com/extra-deal/a/
我会得到404页。

为什么当URL有一个数字时我会得到所需的模板,而当URL的同一部分有文本时我会得到404?

<小时>

Solution

我需要添加自己的重写规则以适应新的url结构。

因此,以下url:

http://mysite.com/extra-deal/the-title-of-the-posting
将按以下规则处理:

function add_rewrite_rules($aRules) {
$aNewRules = array(\'extra-deal/([^/]+)/?$\' => \'index.php?pagename=extra-deal&extradeal_title=$matches[1]\');
$aRules = $aNewRules + $aRules;
return $aRules;
}

add_filter(\'rewrite_rules_array\', \'add_rewrite_rules\');
还有一件事,如果您注意到的话,url需要一个名为“extra deal\\u title”的参数。还需要添加,并通过以下方式完成:

function add_query_vars($aVars) {
$aVars[] = "extradeal_title";
return $aVars;
}

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

WordPress使用一组正则表达式来解析URL(所谓的重写规则)。它以某种顺序匹配它们,并在找到第一个匹配规则时停止。

很难说你的情况符合什么规则。我们不知道您的永久链接设置是什么,也不知道对重写规则做了哪些其他更改。

要查看所有这些规则,只需添加此函数,然后调用它(footer.php 是一个很好的通话地点)

function my_debug_rewrite_rules() {
    global $wp_rewrite;
    echo \'<div>\';
    if ( !empty( $wp_rewrite->rules ) ) {
        echo \'<table><thead><tr><th>Rule</th><th>Rewrite</th></tr></thead><tbody>\';
        foreach ( $wp_rewrite->rules as $name=>$value ) {
            echo \'<tr><td>\'. esc_html($name) .\'</td><td>\'. esc_html($value) .\'</td></tr>\';
        }
        echo \'</tbody></table>\';
    }
    echo \'</div>\';
}
您可以检查的另一件事是以下哪些规则已匹配:

function debug_page_request() {
    global $wp, $template;
    echo \'<p>Request: \'. esc_html($wp->request) .\'</p>\';
    echo \'<p>Matched Rewrite Rules: \'. esc_html($wp->matched_rule) .\'</p>\';
    echo \'<p>Loaded Template: \'. esc_html(basename($template)) .\'</p>\';
}
(请再次致电footer.php).

结束

相关推荐

List repeating share links

我想在我的帖子中添加社交共享按钮,但我不想在我的所有内容文件中添加那么多代码。我想创建一个函数,然后将函数名添加到我的模板文件中,如下所示:function pietergoosen_sosiale_netwerk_deel_knoppies() { <strong>Deel die pos met ander</strong><p </p> <a href=\"http://www.facebook.com/sha