一个被激活的插件是否自动意味着它的方法可以用于其他WP功能?

时间:2011-05-11 作者:Jenny

我制作了一个WordPress插件,如下所示:

Class MY_CLASS {
//codes
}
Global $myclass;
$myclass = New MY_CLASS ();
安装并激活插件后,我可以在其他插件中使用这个类,而不包括myclass。php文件?例如,在另一个插件中:

Global $myclass;
$myclass->a = \'dog\';

3 个回复
最合适的回答,由SO网友:fuxia 整理而成

从技术上讲,这是可能的。但我会使用稍微不同的方法。如果您的第二个插件首先加载,则会出现错误。如果您想替换另一个插件中的类,那么很难做到这一点。

因此,钩住plugins_loaded 以特定的优先级创建对象,并在同一挂钩上的第二个插件中以较低(稍后)优先级使用该对象:

插件1

add_action( \'plugins_loaded\', array ( \'My_Class\', \'init\' ), 10 );

class My_Class
{
    /**
     * Handler for the action \'init\'. Instantiates this class.
     *
     * @since 0.1
     * @return void
     */
    public static function init()
    {
        // Named global variable to make access for other scripts easier.
        $GLOBALS[ __CLASS__ ] = new self;
    }
    public function __construct() { /* Do something awesome. */ }
}
插件2
add_action( \'plugins_loaded\', \'depending_operation\', 11 );

function depending_operation()
{
    if ( empty ( $GLOBALS[ \'My_Class\' ] ) )
    {
        return;
    }
    /* Do something awesome again. */
}
注意10和11英寸add_action()? 这保证了您的第二个插件永远不会在第一个插件之前运行。它仍然需要检查第一个插件是否处于活动状态并正常工作。

现在,您甚至可以在另一个插件中替换该类:

插件3

add_action( \'plugins_loaded\', \'replace_global_class\', 12 );

function replace_global_class()
{
    $GLOBALS[ \'My_Class\' ] = new Replacement_Class;
}

class Replacement_Class {}

SO网友:Jan Fabry

只会自动包含主插件文件。因此,如果插件的结构如下:

  • wp-content/plugins/my-plugin/
    • my-plugin.php
    • my-class.phpmy-plugin.php 将包含在WordPress中。你可以确保MyClass 其他人可通过以下方式获得my-class.php 从您的my-plugin.php 文件

SO网友:adrock42

托肖的回答很有效!另外,如果您正在制作一个插件,该插件可以通过附加组件进行扩展,那么附加组件仍然可以是OOP。

插件2

class My_Class_Addon(){
public function __construct() { /* Do something awesome as an addon to My_Class */ }
}

add_action( \'plugins_loaded\', \'My_Class_Addon_loader\', 11 );
function My_Class_Addon_loader(){
    if(empty($GLOBALS[ \'My_Class\' ])){
        return;
    }
    $this_my_class = new My_Class_Addon();
}

结束

相关推荐

为什么分页在Category.php上不起作用

有两个不同的类别“生命科学”和“普通实验室”,还有关于“生命科学”的子类别产品。现在“普通实验室”类别想要获取“生命科学”拥有的所有子类别和产品。代码在类别中。php。以下是全部代码: <div id=\"container\"> <div id=\"content\" role=\"main\"> <?php if ( is_category(\'general-lab\') ) : ?> &#x