WordPress URL重写不起作用

时间:2012-07-23 作者:Jack Slingerland

我正在尝试为我的wordpress插件创建自定义url重写。

function insert_plugin_rewrite_rule($rules) {
    global $wp, $wp_rewrite;
    $wp->add_query_var(\'update_slug\');
    $ret = $wp_rewrite->add_rule(\'updates/plugins/([^/]+)/\', \'index.php?update_slug=$matches[1]\', \'top\');

    // Remove when debugging is done.
    $wp_rewrite->flush_rules(false);
}

add_filter(\'init\', \'insert_plugin_rewrite_rule\');
并试图拦截它:

function blah() {
    global $wp;
    echo "<pre>";print_r($GLOBALS[\'wp\']->query_vars[\'update_slug\']);echo "</pre>";
}
add_filter(\'init\', \'blah\');
当我在“blah”函数中时,它显示我的update\\u slug query var已经注册,我的url也已经注册。但当我转到/updates/plugins/123/时,它不会显示已设置了任何查询变量。

我做得对吗,还是我遗漏了一些微妙的东西?

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

首先,您应该使用适当的过滤器和方法来添加查询变量和重写规则,而不是直接操作全局变量。我认为另一个问题是您的regex模式,这对我很有用:

add_filter( \'query_vars\', \'wpa59404_query_vars\' );
function wpa59404_query_vars($query_vars){
    $query_vars[] = \'update_slug\';
    return $query_vars;
}

add_action( \'init\', \'wpa59404_rewrites\' );
function wpa59404_rewrites(){
    add_rewrite_rule(
        \'updates/plugins/([^/]+)/?$\',
        \'index.php?update_slug=$matches[1]\',
        \'top\'
    );
}

结束