web-dev-qa-db-ja.com

Ajaxアクションを削除する方法

そのようなAjaxのアクションをロードしているプラ​​グインがあります:

add_action( 'wp_ajax_nopriv_func_name', array( &$this, 'func_name' ) );
add_action( 'wp_ajax_get_func_name', array( &$this, 'func_name' ) );

私は自分のテーマからそれらを削除したいので、次のようにします。

remove_all_actions('wp_ajax_nopriv_func_name');
remove_all_actions('wp_ajax_get_func_name');

しかし、彼らはまだそこにいます。それらが追加された後、私は間違いなくこれをやっています。私は$ wp_filterをスコープに入れ、それらが私のコードの前に確実に設定され、後に設定解除されるのを見ました。

Ajaxアクションを追加したときのWordpressの動作は少し異なります。実際のアクションはどこか別の場所に保存されていると思います。$ wp_filter配列の中を見ると関数名は4823746378642374682746func_nameのようになっているので、それに対するエイリアスを削除しています。

それがどこを参照しているのか、またはそれが削除するための手順が何であるのか私にはわかりません。

誰かが私のためにこれにいくつかの光を当てることはできますか?

編集する

その数はクラスオブジェクトが渡されているからだと思います、それはクラスのハッシュだと思います。

更新:

これはバグ/矛盾のようです。私は次のようなテストをしました。

    add_action('wp_ajax_nopriv_ajax_test', array(&$this, 'ajax_test'));
    add_action('wp_ajax_ajax_test', array(&$this, 'ajax_test'));
    remove_all_actions('wp_ajax_nopriv_ajax_test');
    remove_all_actions('wp_ajax_ajax_test');

ajax_test関数は、追加した直後に削除されていても、JavaScriptからアクセスできます。

誰がこれがどこに格納されているか知っていますか?

更新:

Admin-ajax.phpを担当するコードを見つけました。

do_action( 'wp_ajax_' . $_REQUEST['action'] );

私が頭に浮かぶことができない本当に奇妙なことは、このコードがヒットする前にajaxリクエストが返されることです。そのため、このコードは関連するアクションを実行するためのものであり、ajax要求を返すためのものではないようです。

2
Guerrilla

私が抱えていた主な問題は、ajaxリクエストがヒットしたときにすべてのフックがロードされているわけではないということです。

私はこのコードを使いました:

$return = array();
foreach( $GLOBALS['wp_actions'] as $action => $count )
{
    $return["message"] .= $action . ", ";
}
wp_send_json($return);

これは私に前に走っていたフックを見せて、そして私はそれを働かせました。

私は "wp_loaded"のajaxアクションを削除することはおそらくそれが管理者ajaxがヒットする前に最後のフックであるように思われるので最も良いと思います。 "admin_init"を削除した場合、ファイルの先頭にあるチェックを外すことになりますが、いくつかの項目を見逃している可能性があるので、admin_initを使用することをお勧めします。

1
Guerrilla