J'ai un plugin qui appelle un script php autonome (myAjax.php) via un script jQuery.ajax () à l'intérieur du plugin.
J'ai besoin de placer le code suivant dans le fichier myAjax.php:
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");
}
Cependant, j'aimerais une méthode plus à l'épreuve des balles pour spécifier le chemin vers wp-load.php au cas où le chemin relatif réel est différent de mon exemple.
plugin-development
N2Mystic
la source
la source
Réponses:
Vous pouvez utiliser
__DIR__
constant. Étant donné que le fichier se trouve soit dans le dossier du plugin ou du thème, qui sont toujours situés dans lewp-content
dossier .. Vous pouvez simplement obtenir le chemin du fichier et couper tout à partirwp-content
de celui-ci:Si vous devez vous assurer que le wp ne se trouve pas dans un dossier de contenu wp (qui sait? Des choses se produisent) - utilisez un lookahead négatif:
(car il est plus facile de s'assurer que votre propre plugin que vous développez ne se trouve pas dans un autre dossier wp-content)
Aaand .. votre
wp-load
est là:Mais!
Comme mentionné précédemment, pour AJAX, vous pouvez utiliser la technique ajax native de WP-s .
Bien sûr, il existe des cas où la technique AJAX native de WP n'est pas suffisante.
la source
wp-content
peut être absent ou dans un répertoire complètement différent de WP.Je sais que c'est une vieille question mais je voulais ajouter ma propre réponse qui, je pense, pourrait aider certains utilisateurs à essayer d'obtenir la même chose.
Oui, il est toujours préférable (et plus facile) d'utiliser l'API WP Ajax native, mais cela peut devenir très lent car il charge l'intégralité de l'instance WP.
Ma solution: est assez simple, et devrait fonctionner pour récupérer l'
root
installation de wordpress.wp_register_script()
Quel que soit le script avec lequel vous effectuez l'appel AJAX personnalisé, assurez-vous tout d'abord d'enregistrer le script avec (ne pas le mettre en file d'attente pour le moment). Ensuite, utilisezwp_localize_script()
et analysez leABSPATH
(c'est une constante qui est définie à l'intérieurwp-load.php
et qui tiendra le chemin racine). Vous pouvez maintenant récupérer cela dans votre script et l'analyser avec l'appel AJAX. Enfin, bien sûr, assurez-vous de réellement mettre le script en file d'attente avecwp_enqueue_script()
.Exemple:
L'extrait PHP ci-dessous mettra votre
script.js
fichier en file d' attente et vous permettra de récupérer leroot
répertoire en appelantpluginslug_scriptname_i18n.wp_root
. Fondamentalement, lewp_localize_script()
est utilisé pour effectuer des traductions, mais cela devient également utile pour analyser les données dans votre ou vos scripts que vous avez récupérés côté serveur.Votre
script.js
pourrait ressembler à ceci:Maintenant, à l'intérieur de votre,
ajax-handler.php
vous pouvez récupérerwp_content_dir
et charger votrewp-load.php
comme ceci:Veuillez garder à l'esprit que le
wp_root
côté client peut être modifié.En remarque:
Une autre astuce que certains d'entre vous ne connaissent peut-être pas est qu'avant l'inclusion,
wp-load.php
vous pouvez définir une constante appeléeSHORTINIT
(booléenne). Cela indiquera à WordPress de charger simplement les bases (ce qui signifie que vous perdrez beaucoup de fonctions principales de WP) mais cela accélérera le temps de chargement car il n'inclura pas tous les fichiers requis pour une instance WP normale. LeSHORTINIT
est défini à l'intérieurwp-settings.php
(ouvrez simplement le fichier et recherchezSHORTINIT
. Vous aurez une meilleure compréhension de ce qui se passe sous le capot. Cette astuce astucieuse accélérera encore plus les temps de chargement (jusqu'à 75% dans mes tests que j'ai faits) il y a un certain temps). Mais cela dépendra de la version WP. Gardez également à l'esprit que leswp-load.php
changements sont fréquents avec les nouvelles versions des versions WP, donc si vous utilisezSHORTINIT
assurez-vous que votre script fonctionnera toujours, même dans les futures versions de WordPress, et également avec la version inférieure de WordPress. En bref, si vous faites des choses complexes qui reposent sur une grande partie du codex de WordPress, alors assurez - vous pas misSHORTINIT
à vrai .la source
Vous pouvez utiliser le code ci-dessous pour utiliser wp-load.php pour inclure wp-load à partir de n'importe quel emplacement
la source