web-dev-qa-db-fra.com

problèmes avec un fichier de répertoire de plugin

J'ai un processForm.php dans le répertoire du thème qui fait ce qu'il dit. J'essaie d'inclure un fichier (dont j'ai besoin pour exécuter une fonction spécifique dans processform.php) à partir d'un répertoire de plugin et je n'ai pas pu le faire. Comme suggéré dans première solution de ce fil , j'ai essayé:

include( plugin_dir_path( __FILE__ ) . 'test-plugin/needed_file.php'); 

J'étais à peu près sûr que cela fonctionnerait, mais malheureusement, il lance un avertissement comme celui-ci:

Warning: include(/home2/xxx/public_html/wp-content/themes/xxx/test-plugin/needed_file.php) [function.include]: failed to open stream: No such file or directory 

Comme indiqué précédemment, le fichier processForm.php se trouve dans le répertoire du thème et je n’ai aucun problème ailleurs, en appelant des fichiers dans le répertoire du modèle. Si cela peut vous aider, il existe alos une constante définie pour le chemin de ce plugin qui se présente comme suit:

define('WPFP_PATH', plugins_url() . '/test-plugin'); 

Donc, conformément à une solution suggérée ici , j'ai essayé d'utiliser le code ci-dessous:

include(WPFP_PATH . '/needed_file.php');

Malheureusement, il y a trois types d’avertissements:

Premier avertissement:

http:// wrapper is disabled in the server configuration by allow_url_include=0 

Deuxième avertissement:

failed to open stream: no suitable wrapper could be found in....

Troisième avertissement:

Failed opening 'http://awesomeness.com/wp-content/plugins/test-plugin/needed_file.php' for inclusion (include_path='.:/usr/lib/php:/usr/local/lib/php') in.....

En résumé, voici comment inclure ce fichier dans mon fichier processForm.php (qui se trouve à la racine du répertoire theme).

1
gurung

La fonction plugin_dir_path a un nom trompeur, elle n'inclut pas un fichier du répertoire du plugin, elle n'inclut qu'un fichier du même répertoire que le fichier passé en argument.

Quand vous appelez

include( plugin_dir_path( __FILE__ ) . 'test-plugin/needed_file.php');

à partir d'un fichier du répertoire theme, vous essayez simplement d'inclure également un fichier du répertoire theme, car __FILE__ constant contient toujours le chemin du fichier dans lequel l'instruction est écrite.

La deuxième façon que vous essayez est la bonne, mais lorsque vous définissez WPFP_PATH, vous devez utiliser le chemin du fichier, et non l'URL, car les systèmes pour des raisons de sécurité incluent l'inclusion d'URL.

Donc, vous devez d'abord mettre dans le fichier de plugin principal (celui qui contient les en-têtes de plugin)

define( 'WPFP_PATH', plugin_dir_path( __FILE__ ) ); 

et ensuite dans le thème

include( WPFP_PATH . 'needed_file.php' );

marchera.

Notez que le fichier est écrit sans barre oblique car plugin_dir_path renvoie le chemin avec une barre oblique.

Cependant, une fois que WPFP_PATH est dans l'espace de noms global, vous devez vérifier si defined et/ou peut-être utiliser une fonction pour renvoyer le chemin, quelque chose comme:

function wpfp_get_path() {
  return plugin_dir_path( __FILE__ );
}

puis dans le thème include( wpfp_get_path() . 'needed_file.php' );

4
gmazzap