web-dev-qa-db-fra.com

Query_vars et parse_request personnalisés sur wp-admin

J'ai lu ce post

http://wordpress.org/support/topic/query-vars-in-admin

et bien que ce soit une question assez ancienne, elle me convient parfaitement. J'essaie d'accomplir ce que j'ai déjà posté ici:

Règle la règle pour admin-ajax.php

Mais dans le code ci-dessous, seul le premier filtre est appelé dans wp-admin:

add_action('init', array('MYCLASS', 'add_custom_rewrite_rules'), 10, 1);
add_action('query_vars', array('MYCLASS', 'add_custom_query_vars'), 10, 1);
add_action('parse_request', array('MYCLASS', 'add_custom_parse_request'), 10, 1);

Je n'arrive pas à faire fonctionner ça. Il semble que les deux derniers filtres ne soient pas appelés lors de la navigation dans wp-admin. Est-ce vrai? Comment puis-je contourner cela?

1
arnaldo2204

Je pense que cela fait ce que vous essayez d'atteindre. En ce qui concerne les 404 multisites, vous devez supprimer les règles de réécriture sur chaque site du multisite où vous souhaitez que cette règle soit ajoutée. Une méthode rapide à des fins de test consiste à visiter la page des paramètres de permaliens pour chaque site que vous testez. Notez également que j'ai supprimé l'extension .php de votre règle. Je pense que vous obtiendrez un comportement étrange - REQUEST sera curieusement un tableau vide.

function wpd_api_rule(){
    add_rewrite_rule( 'my-api/?$', 'index.php?my-api=1', 'top' );
}
add_action( 'init', 'wpd_api_rule' );

function wpd_query_vars( $query_vars ){
    $query_vars[] = 'my-api';
    return $query_vars;
}
add_filter( 'query_vars', 'wpd_query_vars' );

function wpd_parse_request( $wp ){
    if( array_key_exists( 'my-api', $wp->query_vars ) ) {
        // AJAX API example -
        // you might want to whitelist actions here
        // use wp_ajax_nopriv_ if not logged in
        do_action( 'wp_ajax_' . $_REQUEST['action'] );
        die(0);
    }
}
add_action( 'parse_request', 'wpd_parse_request' );
3
Milo