Php类中的主题激活挂钩

时间:2018-03-26 作者:at least three characters

我想在我的主题被激活时运行一个函数。我必须在php类中添加主题激活挂钩:

final class My_Class_Name {

    public static function getInstance() {
        if (self::$instance == null) {
            self::$instance = new self;               
            self::$instance->actions();
        } else {
            throw new BadFunctionCallException(sprintf(\'Plugin %s already instantiated\', __CLASS__));
        }
        return self::$instance;
    }


   // some code

   add_action(\'after_switch_theme\', array( $this, \'activate\' ));

   function activate() {
      // some code
   }

   // more code

}

My_Class_Name::getInstance();
当我激活主题时,会出现以下php错误:

PHP警告:call\\u user\\u func\\u array()要求参数1为有效回调,类“My\\u class\\u Name”在/Applications/MAMP/htdocs/wp-themes/test/wp-includes/class-wp-hook中没有“activate”方法。php在线288

如果我使用add_action(\'after_switch_theme\', \'activate\' );

我明白了

PHP致命错误:没有活动的类作用域时无法访问self::

我怎样才能使钩子工作?

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

看起来您正在将钩子添加到类的主体内部。尝试将其添加到init() 方法,并在实例化后或至少在构造函数中调用它。

我认为问题在于,钩子是在PHP完全读取类之前注册的?

尝试以下操作:

final class My_Class_Name {

    function init() {
        add_action(\'after_switch_theme\', array( $this, \'activate\' ));
    }

    function activate() {
    }
}

$class = new My_Class_Name();
$class->init();
希望这有帮助!

SO网友:Mark Kaplun

如果您不打算将事物视为对象或扩展,请不要使用“OOP”;e类,使用适当的名称空间,省去了无意义的麻烦。

单例模式不是OOP,在类中封装全局函数不会带来任何结构或其他类型的价值,只会迫使您使用更多的字符来做任何事情。

到目前为止,我发现在PHP中使用单例模式的唯一用途是能够自动加载代码,但在这种情况下,您不需要在您所处的位置创建对象。

结束

相关推荐

在WP页面中的<html>上方插入自定义PHP标题

我已经建立了一个WordPress网站。以前,我有一个HTML编码的网站。我的新WordPress站点仍处于维护模式。但是,我想在所有网站内容之上插入一个PHP代码。这是我的代码:<?php //DETECT REFERRER if(empty($_SESSION[\"referrer\"])) { $referrer = $_SERVER[\"HTTP_REFERER\"]; if(empty($referrer))