在插件中扩展主题PHP类

时间:2015-09-26 作者:Ben H

我正在尝试创建一个插件,它允许我扩展在特定主题中定义的类。

主题有一个“ET\\U Builder\\U Module”类

在该主题中,定义了各种其他类来扩展该主题,例如:

class ET_Builder_Module_Blurb extends ET_Builder_Module
我想添加自己的类来扩展主题,但出现以下错误:

Fatal error: Class \'ET_Builder_Module\' not found
我使用了以下代码:

class NOOU_ET_Builder_Test_Module extends ET_Builder_Module
我只是简单地复制并粘贴主题中的一个类,然后重命名该类

有人能告诉我如何从插件中的主题扩展类吗?

1 个回复
SO网友:fuxia

在主题声明父类之后,使您的类对PHP可见。

插件首先加载,主题可能稍后加载。这可以被覆盖。

主题代码在操作时可用after_setup_theme 被解雇了,所以你可以这样使用它:

add_action( \'after_setup_theme\', function() {
    require \'ChildClass.php\';   
});
但是,如果主题稍后加载父类,您可能会遇到相同的问题:您不知道它何时真正可用。

另一种选择是autloader: 不要提前加载类。让PHP等待,直到您创建一个类的新实例,然后让已注册的自动加载程序包含正确的文件。

下面是一个非常简单的示例,您可以将其放入插件的主文件中。确保文件名与类名匹配,例如。ET_Builder_Module_Blurb.php.

spl_autoload_register( function( $name ) {

    $path = __DIR__ . "/$name.php";

    if ( file_exists( $path ) )
        require $path;
});

相关推荐