【问题标题】:Cannot rewrite URL with custom var on wordpress无法在 wordpress 上使用自定义 var 重写 URL
【发布时间】:2015-03-20 23:21:18
【问题描述】:

我在使用 wordpress 重写页面 URL 时遇到了一些问题。 我尝试使用常规的 apache mod_rewrite,但结果尚无定论。所以我选择专注于wordpress重写

我的开发域是:

http://localhost/randomwebsite/

我正在尝试重写这个地址

/index.php?p=13806&annee=2014

作为

/resultats/2014/

其中结果是 p=13806 2014 年是“annee”(法语年份)

我的函数.php:

function add_result_url() {
    add_rewrite_rule('^resultats/([0-9]+)/?', 'index.php?p=13806&annee=$matches[1]', 'top');
    add_rewrite_tag('%annee%','([0-9]+)');
};
add_action('init', 'add_result_url');
flush_rewrite_rules();

我的模板文件

global $wp_query;
$season = $wp_query->query_vars['annee'];
var_dump ($wp_query->query_vars['annee']);

var_dump 返回一个 null on

/resultats/2014/

但可以工作

结果/?annee=2014

/index.php?p=13806&annee=2014(第一个重定向)

感谢您的帮助

编辑 1

我检查了 ihor 的 answear 中的 2 链接,但无法使用:

  functions.php 
function add_custom_query_var( $vars ){
        $vars[] = "annee";
        return $vars;
    }
    add_filter( 'query_vars', 'add_custom_query_var' );
    function add_rewrite_rules($aRules) {
        //add_rewrite_rule('^resultats/([^/]*)/([^/]*)/$', '?p=13806&annee=$matches[1]&gp=$matches[2]', 'bottom');
        $aNewRules = array('^resultats/([0-9]*)/$' => 'index.php?p=13806&annee=$matches[1]');
        $aRules = $aNewRules + $aRules;
        return $aRules;
    }
    add_filter('rewrite_rules_array', 'add_rewrite_rules');

template file:
if(isset($wp_query->query_vars['annee'])) {
$season = urldecode($wp_query->query_vars['annee']);
}
var_dump ($season);
var_dump ($_GET["annee"]);

【问题讨论】:

    标签: wordpress mod-rewrite rewrite


    【解决方案1】:
    1. 您无需添加 rewrite_tag,因为您实际上是在 $matches[1] 中捕获此 var。
    2. 您确定 WordPress 知道这个名为 annee 的变量吗?也许你需要先注册这个 var。

    详细解释请参阅这两个 SO 问题:

    How to pass extra variables in URL with Wordpress

    Passing and retrieving query vars in wordpress

    【讨论】:

    • 编辑了我的问题,但仍然卡住了
    • 首先,安装并使用 2 个调试插件 - Query Monitor 和 Rewrite Rules Inspector。第一个将向您展示幕后发生的一切 - WP 如何解析请求,它拾取哪些变量等。第二个将允许您测试您的重写规则并查看是否有另一个规则正在拦截请求。重写规则的捕获是按顺序排列的 - WP 使用第一个匹配的并忽略其余的。从你的问题很难理解问题出在哪里。整个重写主题有点棘手,需要一些调试。
    猜你喜欢
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    相关资源
    最近更新 更多