web-dev-qa-db-fra.com

Wordpress URL Rewrite ne fonctionne pas

J'essaie de créer une réécriture d'URL personnalisée pour mon plugin wordpress.

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

Et pour essayer de l'intercepter:

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

Lorsque je suis dans la fonction 'bla' ', cela montre que ma requête update_slug a été enregistrée et que mon URL a également été enregistrée. Mais quand je vais dans/updates/plugins/123 /, cela ne montre pas que query_vars a été défini.

Est-ce que je fais bien, ou est-ce qu'il me manque quelque chose de subtil?

5
Jack Slingerland

tout d'abord, vous devez utiliser le filtre et la méthode appropriés pour ajouter des vars de requête et des règles de réécriture, sans manipuler directement les éléments globaux. L’autre problème que je crois est votre motif de regex, cela fonctionne pour moi:

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