php类中的WordPress主题激活挂钩

时间:2018-03-26 17:25:39

标签: php wordpress class

我想在激活主题时运行一个函数。我必须在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_user_func_array()期望参数1有效   回调,课程' My_Class_Name'没有方法   '激活'在   /Applications/MAMP/htdocs/wp-themes/test/wp-includes/class-wp-hook.php   在第288行

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

我得到了

  

PHP致命错误:当没有类范围处于活动状态时,无法访问self ::

如何使钩子工作?

1 个答案:

答案 0 :(得分:1)

这是一个简单的方法,我让它工作。

final class My_Class_Name {

    // some code

    public function __construct(){
        add_action('after_switch_theme', array( $this, 'activate' ));
    }

    public function activate() {
        file_put_contents(__DIR__.'\de.log','TEST');
    }

    // more code

}

new My_Class_Name();

这是您可以实例化的另一种方式。

class My_Class_Name{

    protected static $instance = null;

    public function __construct(){}

    public static function get_instance() {
        // If the single instance hasn't been set, set it now.
        if ( null == self::$instance ) {
            self::$instance = new self;
        }

        return self::$instance;
    }
}

My_Class_Name::get_instance();