Ich weiß, dass dies alt ist, aber für den Fall, dass es jemand anderem hilft, der darüber stolpert ...
Normalerweise setze ich in meinen Frontend-Formularen eine Art Flag, um anzuzeigen, dass die eingehende Anfrage Ajax ist.
<input type="hidden" id="my_ajax_flag" name="my_ajax_flag" value="false" />
Anfangs ist dies auf "false" gesetzt, was ich dann auf "true" umschalte, während ich anfange, den Ajax zu verarbeiten.
$('#my_ajax_flag').val('true'); // example using jQuery
Dann überprüfe ich auf der Admin-Seite meines Codes diesen Parameter und füge dann entweder meine Ajax-Hooks hinzu oder führe meine regulären Nicht-Ajax-Admin-Aufgaben aus. Also zum Beispiel:
if ( isset( $_REQUEST['my_ajax_flag'] ) && $_REQUEST['my_ajax_flag'] == 'true' ) {
add_action('wp_ajax_my_ajax_function', 'my_ajax_function');
add_action('wp_ajax_no_priv_my_ajax_function', 'my_ajax_function');
} else {
// regular non-ajax stuff
}
Je nachdem, was Sie tun müssen, gibt es mehrere Variationen dieser Idee. Sie können jedoch verhindern, dass Ihr regulärer Administrationscode beim Ausführen von Ajax-Anforderungen stört oder ausgelöst wird.
Eine weitere Empfehlung, die nützlich sein kann, ist das Festlegen des WordPress-Attributs "noheader" in Ihren Formularen.
<input type="hidden" name="noheader" value="true" />
Wenn Sie eine Backend-Verarbeitung durchführen, die letztendlich zu einer Umleitung führt (empfohlen, um die gefürchtete Übermittlung von Doppelformularen zu vermeiden), müssen Sie in seltenen Randfällen auf wp-Hooks zugreifen, die normalerweise nach "bereits gesendeten Headern" auftreten würden.