web-dev-qa-db-ja.com

Wp-adminでのカスタムquery_varsとparse_request

私はこの記事を読みました

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

それはかなり古い質問ですが、それは私にぴったりです。私はすでにここに投稿したことを達成しようとしています。

admin-ajax.phpの書き換え規則

しかし、以下のコードでは、最初のフィルタのみが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);

これがうまくいかない。 wp-admin内を移動している間、最後の2つのフィルタは呼び出されないようです。本当?どうすればこれを回避できますか。

1
arnaldo2204

私はこれがあなたが達成しようとしていることだと思います。マルチサイト404に関しては、このルールを追加したいマルチサイト内のすべてのサイトで 書き換えルール をフラッシュする必要があります。テスト目的の簡単な方法は、テストしている各サイトのパーマリンク設定ページにアクセスすることです。また、私はあなたのルールから.php拡張子を削除しました。 REQUESTは奇妙なことに空の配列になるでしょう。

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