Hatte heute eine Situation, in der ich admin-ajax.php aus einem Front-End-Skript verwendete. Soweit ich weiß, ist dies die wp-Methode, um Ajax-Aufrufe zu tätigen (Registrierung meiner Funktion beim Hook wp_ajax_nopriv_myfunction).
Da admin-ajax.php sich auf der Admin-Seite befindet, gibt is_admin () true zurück, während mein Skript es von der Front-End-Seite aus aufruft.
Dies verursacht ein Problem mit einem von mir verwendeten Plugin, das die Dinge auf der Front- und Administratorseite unterschiedlich macht.
Also habe ich mich gefragt, ob ich etwas falsch gemacht habe
Gibt es eine Möglichkeit, Ajax im Front-End auf wp-Weise zu verwenden und is_admin () zu haben, um false zurückzugeben?
hoffe ich konnte mich verständlich machen
Antworten:
WordPress setzt
is_admin()
für alle Ajax-Anfragen (Front-End oder Admin-Seite) auf true. (Siehe Codex ).Es gibt keine Möglichkeit, dies zu überwinden (und Sie sollten es sowieso nicht tun). Wenn Ihre Ajax-Anfrage sowohl vom Front-End als auch vom Administrator ausgelöst werden kann, möchten Sie möglicherweise angeben, ob es sich um einen Administrator handelt, wenn Sie die Daten veröffentlichen. Aber ohne Details zu den "Problemen", die es mit Ihrem Plug-In verursacht, ist es schwierig, einen Work-Aroudn anzubieten.
quelle
is_admin()
kehrt immertrue
für jeden AJAX-Aufruf zurück. Wenn Sie AJAX-Aufrufe nur vom Frontend aus validieren möchten, kann dies eine Problemumgehung sein:quelle
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.
Anfangs ist dies auf "false" gesetzt, was ich dann auf "true" umschalte, während ich anfange, den Ajax zu verarbeiten.
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:
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.
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.
quelle
defined( 'DOING_AJAX' ) && DOING_AJAX
.is_ajax()
. Ja, es wird nur das erwähnte bedingte @toscho überprüft, aber ein Hauch kürzer.Ich wollte die Protokollierung am Frontend und am Administrator über eine Dashboard-Menüschaltfläche aktivieren / deaktivieren. Ich habe einfach eine Klasse zu meiner Menüschaltfläche hinzugefügt und dann den Status der Administrationsseite mit jQuery abgefragt
https://codex.wordpress.org/Class_Reference/WP_Admin_Bar/add_menu
Fügen Sie einen Menüpunkt mit dem Administratorstatus als Klasse hinzu
Holen Sie sich den Menüpunkt mit jQuery in Javascript und verwenden Sie ihn:
quelle