我试图使用composer维护一个简单的Wordpress插件的文件。插件代码使用三个文件:
dmg_custom_menu_widget.php
- 需要类并使用Wordpress注册窗口小部件的文件WP_Custom_Menu_Widget.php
- 主要小部件类WP_Widget_Base.php
- 由WP_Custom_Menu_Widget.php
我使用composer来安装插件代码并获取依赖项。
如果dmg_custom_menu_widget.php
使用这样的编辑器自动加载文件包含文件:
require_once 'vendor/autoload.php';
我收到致命错误:调用未定义的方法......'因为它包含了dmg-custom-menu-widget基本目录之外的另一个widget插件所使用的旧版WP_Widget_Base.php
。
dmg_custom_menu_widget.php
使用以下文件直接包含文件:
require_once 'vendor/DMG/WP_Widget_Base/src/WP_Widget_Base.php';
require_once 'src/WP_Custom_Menu_Widget.php';
我没有错误,因为包含了正确的文件。
这是相关的文件夹结构:
plugins/
dmg-related-pages-widget/
vendor/
DMG/
WP_Widget_Base/
src/
WP_Widget_Base.php <- File being included
dmg-custom-menu-widget/
dmg_custom_menu_widget.php <- Calls require_once 'vendor/autoload.php'
vendor/
autoload.php <- Composer autoload file
DMG/
WP_Widget_Base/
src/
WP_Widget_Base.php <- File that should be included
其他信息
如果删除文件夹dmg-related-pages-widget
,则会包含正确的文件。
Composer.json
{
"name" : "DMG/WP_Custom_Menu_Widget",
"license" : "GPL-3.0",
"repositories":
[
{
"type": "git",
"url": "https://dgifford@bitbucket.org/dgifford/wp_widget_base.git"
}
],
"require":
{
"DMG/WP_Widget_Base" : "dev-master"
},
"autoload":
{
"classmap":
[
"src/WP_Custom_Menu_Widget.php"
]
}
}
答案 0 :(得分:1)
检查是否包含了正确的vendor/autoload.php
。
也许您的问题是您的工作目录是dmg-related-pages-widget
,当dmg_custom_menu_widget.php
包含vendor/autoload.php
时,它会加载dmg-related-pages-widget
中的文件而不是dmg_custom_menu_widget
中的文件}。如果存在包含dmg_custom_menu_widget.php
的其他脚本,则会发生这种情况。在PHP中,工作目录将默认发布PHP解释器,如果是Web服务器则为“document_root”。
要检查这是否是问题,请在chdir(__DIR__);
中添加vendor/autoload.php
之前添加dmg_custom_menu_widget.php
。如果它有效,那么你就知道问题了。还有getcwd()
函数可以帮助临时更改工作目录。
还有另一种可能性,即在vendor/autoload.php
包含右dmg_custom_menu_widget.php
之前,以某种方式包含了错误的vendor/autoload.php
。这意味着错误的自动加载器在正确的自动加载器之前注册,并尝试首先加载类。所以首先加载错误的类。