我正在尝试编写一个包含多个文件的插件,我确信我之前没有这样做过 一个问题,但现在我有问题。
在主插件文件中我包含了一个文件名 - ydp-includes.php, 在ydp-includes.php里面我包含了我想要的所有文件:
<?php
include(dirname( __FILE__ ) .'/1.php');
include(dirname( __FILE__ ) .'/2.php');
include(dirname( __FILE__ ) .'/3.php');
include(dirname( __FILE__ ) .'/4.php');
?>
但我得到:致命错误:调用未定义的函数add_action() 文件是包括但由于一个原因,我目前无法看到wordpress 不会将它们视为一个插件包,而且每个wordpress函数都被忽略。
还有另一种开发多个文件wordpress插件的最佳实践方法吗? 我做错了什么?
感谢
答案 0 :(得分:5)
在PHP include
中是statement not a function。
所以它应该是
<?php
include dirname( __FILE__ ) .'/1.php';
include dirname( __FILE__ ) .'/2.php';
include dirname( __FILE__ ) .'/3.php';
include dirname( __FILE__ ) .'/4.php';
?>
或完美
<?php
require_once dirname( __FILE__ ) .'/1.php';
require_once dirname( __FILE__ ) .'/2.php';
require_once dirname( __FILE__ ) .'/3.php';
require_once dirname( __FILE__ ) .'/4.php';
?>
答案 1 :(得分:3)
根据错误消息,听起来好像是在尝试直接访问插件文件,这是不正确的。 WordPress使用前端控制器设计模式,这意味着您将要拥有这样的文件:
my-plugin-folder/my-plugin-name.php
my-plugin-folder/includes/ydp-includes.php
my-plugin-folder/includes/ydp-database.php
my-plugin-name.php内部:
//Get the absolute path of the directory that contains the file, with trailing slash.
define('MY_PLUGIN_PATH', plugin_dir_path(__FILE__));
//This is important, otherwise we'll get the path of a subdirectory
require_once MY_PLUGIN_PATH . 'includes/ydb-includes.php';
require_once MY_PLUGIN_PATH . 'includes/ydb-database.php';
//Now it's time time hook into the WordPress API ;-)
add_action('admin_menu', function () {
add_management_page('My plugin Title', 'Menu Title', 'edit_others_posts', 'my_menu_slug', 'my_plugin_menu_page_content'
});
//Php 5.3+ Required for anonymous functions. If using 5.2, create a named function or class method
function my_plugin_menu_page_content () {
//Page content here
}
这将添加一个WordPress管理菜单项,并加载所需的文件。您现在还可以使用常量MY_PLUGIN_PATH
另见:
答案 2 :(得分:1)
使用plugin_dir_path( __FILE__ );
获取插件的文件。使用下面的代码参考:
$dir = plugin_dir_path( __FILE__ );
require_once($dir.'1.php');
require_once($dir.'2.php');
require_once($dir.'3.php');
require_once($dir.'4.php');