如何从插件中包含类,以确保在主插件中存在一个类?

时间:2017-12-08 作者:J.BizMai

我有一个插件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包含在我的主插件中?

1 个回复
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();

结束