web-dev-qa-db-de.com

So entfernen Sie eine Ajax-Aktion

Es gibt ein Plugin, das Ajax-Aktionen wie folgt lädt:

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

Ich möchte sie in meinem Theme entfernen, also mache ich:

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

Aber sie sind immer noch da. Ich mache das definitiv, nachdem sie hinzugefügt wurden. Ich brachte $ wp_filter in den Geltungsbereich und sah, dass sie definitiv vor meinem Code und danach nicht mehr gesetzt waren.

Es sieht aus wie WordPress, wenn Sie Ajax-Aktionen hinzufügen, funktioniert ein wenig anders. Ich denke, die eigentliche Aktion ist woanders gespeichert und ich entferne nur einen Alias, wenn ich in das $ wp_filter-Array schaue, ist der Funktionsname wie 4823746378642374682746func_name.

Ich bin nicht sicher, wo es verweist oder wie es entfernt wird.

Kann mir jemand etwas Licht ins Dunkel bringen?

Bearbeiten:

Ich denke, die Zahlen sind, weil das Klassenobjekt übergeben wird, ich denke, es ist ein Hash der Klasse.

Aktualisieren:

Dies scheint ein Fehler/eine Inkonsistenz zu sein. Ich habe folgenden Test gemacht:

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

auf die ajax_test funktion kann von javascript aus zugegriffen werden, obwohl sie unmittelbar nach dem hinzufügen entfernt wurde.

Weiß jemand, wo das aufbewahrt wird?

Aktualisieren:

Ich habe den verantwortlichen Code in admin-ajax.php gefunden

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

Das wirklich seltsame, was ich nicht verstehen kann, ist, dass die Ajax-Anfrage zurückkommt, bevor dieser Code getroffen wird. Es scheint also, dass dieser Code nur dazu dient, verknüpfte Aktionen auszuführen und die Ajax-Anforderung nicht zurückzugeben.

2
Guerrilla

Das Hauptproblem, das ich hatte, ist, dass, wenn eine Ajax-Anfrage trifft, nicht alle Hooks geladen werden.

Ich habe diesen Code benutzt:

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

Dies zeigte mir die Haken, die vorher liefen und ich brachte es zum Laufen.

Ich denke, Ajax-Aktionen auf "wp_loaded" zu entfernen ist wahrscheinlich am besten, da es der letzte Haken zu sein scheint, bevor Admin Ajax getroffen wird. Wenn Sie auf "admin_init" entfernen, verpassen Sie die Prüfung oben in der Datei, obwohl dies bedeuten kann, dass Sie einige verpassen. Vielleicht ist es besser, dies auf admin_init zu tun.

1
Guerrilla