我有一个插件Foo。在这个插件中,我的主类可以包括几个类,其中一个是名为Heading的有用抽象类。
Foo.php - 插件中的我的主类Foo
namespace PluginFoo;
class Foo{
public function __construct(){
$this->include_dependencies();
}
private function include_dependencies(){
...
if( file_exists( PLUGIN_DIR_PATH."admin/Heading" ) ) {
include_once \'Heading.php\';
}
...
}
}
new Foo();
我正在编写一个插件FooAddon。在这个插件中,我需要包含一个扩展标题的类a。类似这样:
FooAddon.php - 我的插件中的主类FooAddon
namespace PluginFoo;
class FooAddon{
public function __construct(){
$this->include_dependencies();
}
private function include_dependencies(){
...
if( class_exists( "PluginFoo\\\\Admin\\\\Heading" ) ){
if( file_exists( PLUGIN_ADDON_DIR_PATH."dir/MyClass.php" ) ) {
include_once \'dir/MyClass.php\'; //<-- it\'s not included !
}
}
...
}
}
new FooAddon();
MyClass.php - 我的班级包括
namespace PluginFoo\\Admin;
use PluginFoo\\Admin\\Heading;
class MyClass extends Heading {
...
}
如何包含Myclass。php在这个加载项之后,确保标题。php包含在我的主插件中?
SO网友:J.BizMai
我找到了这个似乎很好的答案。我使用了加载的挂钩和管理菜单。钩子admin\\u菜单在admin\\u菜单之前,因此我可以添加一个admin页面菜单。
FooAddon.php
namespace PluginFoo;
class FooAddon{
public function __construct(){
// Install needed components on plugin activation
register_activation_hook( __FILE__, array( $this, \'install\' ) );
// Include dependencies
add_action(\'plugins_loaded\', array( $this , \'include_dependencies\' ) );
// Initialize the components
add_action(\'_admin_menu\', array( $this , \'init\' ) );
}
public function include_dependencies(){
...
if( class_exists( "PluginFoo\\\\Admin\\\\Heading" ) ){
if( file_exists( PLUGIN_ADDON_DIR_PATH."dir/MyClass.php" ) ) {
include_once \'dir/MyClass.php\';
}
}
...
}
public function init(){
if( is_admin() ){
if( ! class_exists( "PluginWPGroupSubs\\\\Admin\\\\MYCLASS" ) ) {
error_log("MyClass was not included");
}else{
new MyClass();
}
}
}
}
new FooAddon();