问题包括来自插件目录的文件

时间:2013-10-25 作者:gurung

我有一个processForm。主题目录中的php实现了它所说的功能。我正在努力include a file (我需要它来运行processform.php中的特定函数)从插件目录中执行,但无法执行此操作。如中所述first solution in this thread 我试过:

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 
如前所述,流程表单。php位于主题目录中,我在其他任何地方都没有问题,只调用模板目录中的文件。如果这有帮助的话,可以为这个特定插件的路径定义一个常量,如下所示:

define(\'WPFP_PATH\', plugins_url() . \'/test-plugin\'); 
所以根据建议的解决方案here, 我尝试使用以下代码:

include(WPFP_PATH . \'/needed_file.php\');
不幸的是,它会引发三种类型的警告:

第一个警告:

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 个回复
最合适的回答,由SO网友:gmazzap 整理而成

功能plugin_dir_path 具有误导性的名称,它不包括插件目录中的文件,它只包括作为参数传递的文件的同一目录中的文件。

当你打电话的时候

include( plugin_dir_path( __FILE__ ) . \'test-plugin/needed_file.php\');
从主题目录中的一个文件中,您也只是试图包含主题目录中的一个文件,因为__FILE__ 常量始终包含写入语句的文件路径。

第二种方法是正确的,但当你定义WPFP_PATH 您应该使用path 而不是url,因为许多系统出于安全原因禁用了包含url。

因此,您首先必须放入主插件文件(包含插件头的文件)

define( \'WPFP_PATH\', plugin_dir_path( __FILE__ ) ); 
然后是主题

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\' );

结束