Ich habe ein Plugin, das ein eigenständiges PHP-Skript (myAjax.php) über ein jQuery.ajax () -Skript im Plugin aufruft.
Ich muss den folgenden Code in die Datei myAjax.php einfügen:
require_once('../../../wp-load.php');
if (!is_user_logged_in()){
die("You Must Be Logged In to Access This");
}
if( ! current_user_can('edit_files')) {
die("Sorry you are not authorized to access this file");
}
Ich möchte jedoch eine kugelsichere Methode zum Festlegen des Pfads zu wp-load.php, falls der tatsächliche relative Pfad von meinem Beispiel abweicht.
plugin-development
N2Mystic
quelle
quelle
Antworten:
Sie können
__DIR__
Konstante verwenden. Da sich die Datei entweder im Plugin oder im Themenordner befindet, die sich immer imwp-content
Ordner befinden. Sie können einfach den Pfad der Datei abrufen und alles ausgehendwp-content
davon abschneiden:Wenn Sie sicherstellen müssen, dass sich das wp nicht in einem Ordner mit wp-Inhalten befindet (wer weiß? Es passieren Dinge), verwenden Sie einen negativen Lookahead:
(da es einfacher ist sicherzustellen, dass sich Ihr eigenes Plugin, das Sie entwickeln, nicht in einem anderen Ordner mit wp-Inhalten befindet)
Aaand .. dein
wp-load
ist da:Aber!
Wie bereits erwähnt, können Sie für AJAX die native Ajax-Technik von WP verwenden .
Natürlich gibt es Fälle, in denen die native AJAX-Technik von WP nicht ausreicht.
quelle
wp-content
kann fehlen oder sich in einem völlig anderen Verzeichnis als WP befinden.Ich weiß, dass dies eine alte Frage ist, wollte aber meine eigene Antwort hinzufügen, die meiner Meinung nach einigen Benutzern helfen könnte, das Gleiche zu erreichen.
Ja, es ist immer besser (und einfacher), die native WP Ajax-API zu verwenden, aber es kann sehr langsam werden, da die gesamte WP-Instanz geladen wird.
Meine Lösung: ist recht einfach und sollte funktionieren, um
root
die WordPress-Installation abzurufen .wp_register_script()
Stellen Sie in jedem Skript, in dem Sie den benutzerdefinierten AJAX-Aufruf ausführen , sicher, dass Sie das Skript zuerst bei registrieren (stellen Sie es noch nicht in die Warteschlange). Verwendenwp_localize_script()
und analysieren Sie dann dieABSPATH
(dies ist eine Konstante, die im Inneren definiert istwp-load.php
und den Root-Pfad enthält). Sie können dies jetzt in Ihrem Skript abrufen und zusammen mit dem AJAX-Aufruf analysieren. Stellen Sie schließlich sicher, dass Sie das Skript tatsächlich in die Warteschlange stellenwp_enqueue_script()
.Beispiel:
Das folgende PHP-Snippet stellt Ihre
script.js
Datei in die Warteschlange und ermöglicht es Ihnen, dasroot
Verzeichnis durch Aufrufen abzurufenpluginslug_scriptname_i18n.wp_root
. Grundsätzlich wird daswp_localize_script()
verwendet, um Übersetzungen durchzuführen, aber dies ist auch nützlich, um Daten in Ihre Skripte zu analysieren, die Sie serverseitig abgerufen haben.Du
script.js
könntest so aussehen:Jetzt können
ajax-handler.php
Sie in Ihrem Ordner Folgendes abrufenwp_content_dir
und ladenwp-load.php
:Bitte beachten Sie, dass die
wp_root
Client-Seite geändert werden kann.Als Anmerkung:
Ein weiterer Trick, den einige von Ihnen möglicherweise nicht kennen, besteht darin, dass Sie vor dem Einschließen
wp-load.php
eine Konstante mit dem NamenSHORTINIT
(boolean) definieren können. Dies weist WordPress an, nur die Grundlagen zu laden (was bedeutet, dass Sie viele WP-Kernfunktionen verlieren), beschleunigt jedoch die Ladezeit, da nicht alle erforderlichen Dateien für eine reguläre WP-Instanz enthalten sind. DasSHORTINIT
ist im Inneren definiertwp-settings.php
(öffnen Sie einfach die Datei und suchen Sie danachSHORTINIT
. Sie haben ein besseres Verständnis dafür, was unter der Haube passiert. Dieser raffinierte Trick beschleunigt die Ladezeiten noch mehr (bis zu 75% in meinen Tests, die ich durchgeführt habe vor einiger Zeit). Dies hängt jedoch von der WP-Version ab. Beachten Sie auch, dass sich diewp-load.php
Änderungen bei neuen Versionen von WP-Versionen häufig ändernSHORTINIT
Stellen Sie sicher, dass Ihr Skript auch in zukünftigen Versionen von WordPress und auch in niedrigeren Versionen von WordPress immer funktioniert. Kurz gesagt, wenn Sie komplexe Dinge tun , die auf einer Menge von dem Wordpress - Kodex verlassen, dann stellen Sie sicher, nicht festgelegtSHORTINIT
zu wahren .quelle
Sie können den folgenden Code verwenden, um wp-load.php zu verwenden, um wp-load von jedem Ort aus einzuschließen
quelle