为什么不使用我的路径名

时间:2016-02-29 作者:Denise Draper

我正在编写一个插件,在主插件文件的顶部,我有一系列require_once 典型的陈述。

在花了十多个小时试图找出WP找不到我的课程的原因后,我终于找到了这个——如果我有:

require_once( \'includes/myclassfile.php\' );
它失败了。但如果我显式地在基本路径中这样放置:

define ( \'MY_DIR\', rtrim( plugin_dir_path( __FILE__ ), \'/\' ) );
require_once( MY_DIR . \'/includes/myclassfile.php\' );
它成功了。

所以我的问题是:为什么第一张表格不起作用?我的IDE(PhpStorm)理解它,我开始使用它的模板,我安装了其他使用该表单的插件,它们都可以工作。这个案子有什么不同?

编辑:这个问题被标记为另一个问题的重复,这也解决了关于正确使用require, 然而,在这种情况下,最终的结论与对我有效的恰恰相反。我不是问该怎么办,而是问为什么一个版本会失败。Isaac的回答说明了一个原因,但它并不令人满意,因为我的wordpress安装中还有其他顶级插件,它们与我的表单不兼容——我想知道是什么让我的表单与众不同。

(为了完整起见,这里是完整的插件文件:)

/*
 * Plugin Name: A Strenga Projects
 * Version: 1.0
 * Description: Projects for Strenga
 * Author: DD
 */
if ( ! defined( \'ABSPATH\' ) ) exit;

define ( \'STRENGA_PROJECTS_DIR\', rtrim( plugin_dir_path( __FILE__ ), \'/\' ) );    
require_once( STRENGA_PROJECTS_DIR . \'/includes/plugin.php\' );

function myFoofunction() {
    ladeda();  // defined in plugin.php
}
myFoofunction();

1 个回复
SO网友:Isaac Lubow

在像WordPress这样的复杂应用程序中,相对路径可能会令人困惑。插件文件本身是included 通过调用它们的脚本,以及will be interpreted as those of the file that called them.

使用magic constant 例如__FILE____DIR__, 正如你所发现的。

相关推荐