web-dev-qa-db-ja.com

プラグインディレクトリからのファイルを含む問題

私はprocessForm.php をテーマディレクトリ に持っています。私はプラグインディレクトリからファイル(processform.phpで特定の機能を実行するために必要です)をインクルードしようとしていますができませんでした。このスレッドの 最初の解決策 で示唆したように、私は試してみました:

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

私はこれがうまくいくと確信していました、しかし残念ながらそれはそのような警告を投げます:

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 

先に述べたように、processForm.phpはthemeディレクトリにあり、私はどこにも問題はありません。テンプレートディレクトリ内のファイルを呼び出します。これが助けになるかもしれないならば、この特定のプラグインのパスのために定義されたalos定数がこのようになります:

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

だからここで提案された解決策 に従って 、私は以下のコードを使ってみました:

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

残念ながら、それは3種類の警告を投げます:

最初の警告

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

第二の警告:

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

第三の警告:

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.....

つまり、最低限必要なのは、このファイルをprocessForm.php(テーマディレクトリのルートにある)に含める方法です。

1
gurung

関数plugin_dir_pathは誤解を招くような名前を持っています、それはプラグインディレクトリからのファイルを含みません、それはただ引数として渡されたファイルの同じディレクトリからのファイルを含みます。

電話するとき

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

__FILE__定数は常にステートメントが書かれているファイルのパスを含むので、テーマディレクトリのファイルから、あなたはテーマディレクトリのファイルも含めようとしています。

2番目の方法は正しい方法ですが、WPFP_PATHを定義するときは、URLではなくパスを使用する必要があります。セキュリティ上の理由から、システムではURLのインクルードが無効になっています。

ですから、最初にメインプラグインファイル(プラグインヘッダを含むもの)を入れる必要があります。

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

そして主題のthene

include( WPFP_PATH . 'needed_file.php' );

働くでしょう。

plugin_dir_pathは末尾のスラッシュ付きのパスを返すため、ファイルは先頭のスラッシュなしで書き込まれます。

しかし、WPFP_PATHがグローバル名前空間に入ったら、definedかどうかを確認する必要があります。パスを返すために関数を使用する必要があります。

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

そしてinclude( wpfp_get_path() . 'needed_file.php' );をテーマに

4
gmazzap