is_admin () gibt true zurück, wenn admin-ajax.php vom Front-End-Skript verwendet wird

Hatte heute eine Situation, in der ich admin-ajax.php von einem Front-End-Skript verwendete. Wie ich es verstehe ist dies der wp Weg um Ajax zu machen (Registrierung meiner function mit dem wp_ajax_nopriv_myfunction Hook)

Da admin-ajax.php auf der Admin-Seite ist, gibt is_admin () wahr zurück, während mein Skript es von der Front-End-Seite aufruft.

Dies verursacht ein Problem mit einem Plugin, das Dinge auf der Front- und Admin-Seite der Dinge anders macht.

Also habe ich mich gefragt, ob ich etwas falsch mache

gibt es eine Möglichkeit, AJAX im Front-End der WP-Weg zu verwenden und is_admin (), um falsch zurückgeben?

Ich hoffe, ich könnte es verstehen

Solutions Collecting From Web of "is_admin () gibt true zurück, wenn admin-ajax.php vom Front-End-Skript verwendet wird"

WordPress setzt is_admin() auf True für alle Ajax-Anfragen (Frontend oder Admin-Seite). (Siehe Codex ).

Es ist nicht weg von Überreiten dieses (und Sie sollten nicht sowieso). Wenn Ihre Ajax-Anfrage sowohl von der Front-End- als auch von der Admin-Seite ausgetriggers werden kann, möchten Sie möglicherweise angeben, ob sie “admin” ist oder nicht, wenn Sie die Daten posten. Aber ohne irgendwelche Details zu den “Problemen”, die es mit Ihrem Plug-in verursacht, ist es schwer, eine Work-Aroudn anzubieten.

Ich weiß, das ist alt, aber für den Fall, dass es irgendjemandem hilft, der über das stolpert …

Normalerweise setze ich eine Art Flag in meinen Frontend-Formularen, um anzuzeigen, dass die eingehende Anfrage Ajax ist.

  

Anfangs wird dies auf “false” gesetzt, was ich dann auf “true” umstelle, während ich anfange, den Ajax zu verarbeiten.

 $('#my_ajax_flag').val('true'); // example using jQuery 

Dann suche ich in der Admin-Seite meines Codes nach diesem Parameter und schließe dann entweder meine Ajax-Hooks ein oder führe meine normalen Nicht-Ajax-Admin-Sachen 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 Varianten dieser Idee, aber Sie können damit verhindern, dass Ihr regulärer Admin-Code beim Ausführen von Ajax-Anfragen interferiert oder ausgetriggers wird.

Eine andere Empfehlung, die nützlich sein kann, ist das Festlegen des WordPress-Attributs “noheader” in Ihren Formularen.

  

bei der Backend-Verarbeitung, die letztendlich zu einer Weiterleitung führt (empfohlen, um die gefürchtete doppelte Formularübergabe zu vermeiden), in seltenen Fällen, in denen Sie auf wp-Hooks zugreifen müssen, die normalerweise nach “bereits gesendeten Headern” auftreten.