web-dev-qa-db-fra.com

Comment inclure wp-load.php à partir de n'importe quel endroit?

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");
}

Toutefois, je souhaiterais une méthode plus précise pour spécifier le chemin d'accès à wp-load.php au cas où le chemin relatif réel serait différent de mon exemple.

7
N2Mystic

Pour ajouter à ce que Milo a dit, voici 2 excellents articles sur le sujet.
http://www.garyc40.com/2010/03/5-tips-for-using-ajax-in-wordpress/ ( dernière version ) http://ottopress.com/2010/dont-include-wp-load-please/ ( dernière version )

Toujours dans un souci d’apprentissage, le premier diaporama http://andrewnacin.com/2011/04/16/wordcamp-seattle/ ( dernière version )

6
Wyck
8
Milo

Vous pouvez utiliser la constante __DIR__. Comme le fichier se trouve soit dans le dossier du plugin ou du thème, toujours situés dans le dossier wp-content. Vous pouvez simplement obtenir le chemin du fichier et couper tout ce qui commence à partir de wp-content:

$path = preg_replace('/wp-content.*$/','',__DIR__);

Si vous devez vous assurer que le fichier wp ne se trouve pas dans un dossier wp-content (qui sait? Des choses se passent), utilisez un aspect négatif:

$path = preg_replace('/wp-content(?!.*wp-content).*/','',__DIR__);

(puisqu'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à:

include($path.'wp-load.php');

Mais!

Comme mentionné précédemment, pour AJAX, vous pouvez utiliser technique ajax native de WP-s .

Bien sûr, il existe des cas où la technique native de WPAJAX ne suffit pas.

3
Ilia Andrienko