web-dev-qa-db-ja.com

WordpressのURLの書き換えが機能しない

私は私のワードプレスプラグインのカスタム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_slugクエリvarが登録されていること、そして私のurlも登録されていることを示しています。しかし、私が/ updates/plugins/123 /に行ってもquery_varsが設定されていることは何も表示されません。

私はこれを正しくやっていますか、それとも私が見逃している微妙なことがありますか?

5

まず、適切なフィルタとメソッドを使用してクエリ変数を追加し、ルールを書き換えて、グローバルを直接操作しないでください。私が信じるもう一つの問題はあなたの正規表現パターンです、これは私のために働いています:

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'
    );
}
3
Milo