it-swarm.com.de

Benutzerdefinierte query_vars und parse_request unter wp-admin

Ich habe diesen Beitrag gelesen

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

und obwohl es eine ziemlich alte Frage ist, passt es mir perfekt. Ich versuche zu erreichen, was ich bereits hier gepostet habe:

Schreibe die Regel für admin-ajax.php um

Im folgenden Code wird jedoch nur der erste Filter in wp-admin aufgerufen:

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

Ich kann das nicht zum Laufen bringen. Es sieht so aus, als würden die beiden letzten Filter beim Navigieren in wp-admin nicht aufgerufen. Ist das wahr? Wie kann ich das umgehen?

1
arnaldo2204

Ich denke, das macht das, was Sie erreichen wollen. In Bezug auf Multisite-404s müssen Sie Schreibregeln löschen an jeder Site innerhalb von Multisite, an der diese Regel hinzugefügt werden soll. Eine schnelle Methode zum Testen ist der Besuch der Seite mit den Einstellungen für Permalinks für jede Website, die Sie testen. Beachten Sie auch, dass ich die Erweiterung .php aus Ihrer Regel entfernt habe. Ich denke, Sie werden sonst seltsames Verhalten bekommen - REQUEST wird seltsamerweise ein leeres Array sein.

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