webentwicklung-frage-antwort-db.com.de

Wordpress URL Rewrite funktioniert nicht

Ich versuche, eine benutzerdefinierte URL für mein WordPress-Plugin zu erstellen.

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');

Und um es abzufangen:

function blah() {
    global $wp;
    echo "<pre>";print_r($GLOBALS['wp']->query_vars['update_slug']);echo "</pre>";
}
add_filter('init', 'blah');

Wenn ich mich in der Funktion 'blah' befinde, wird angezeigt, dass meine update_slug-Abfragevariable registriert wurde und dass auch meine URL registriert wurde. Aber wenn ich zu/updates/plugins/123/gehe, werden keine query_vars angezeigt, die gesetzt wurden.

Mache ich das richtig oder gibt es eine subtile Sache, die ich vermisse?

5

zunächst sollten Sie den richtigen Filter und die richtige Methode verwenden, um Abfragevariablen hinzuzufügen und Regeln neu zu schreiben, und nicht um die globalen Variablen direkt zu bearbeiten. Das andere Problem, von dem ich glaube, dass es Ihr Regex-Muster ist, funktioniert für mich:

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