如何使用OOP模式在插件中注册激活和去激活钩子

时间:2017-06-03 作者:magento_psycho

我需要知道如何编写注册函数activation_hookdeactivation_hook 下列的OOP fashion with best practices.

我知道我们可以在插件激活/停用中完成一些任务,这在某些情况下非常重要,比如创建专业插件。

谢谢

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

可以这样演示:

Step-1: 创建一个名为includes(或您喜欢的任何名称)位于插件根文件夹内。创建两个名为class-responsive-slider-activator.phpclass-responsive-slider-deactivator.php
现在,在类响应滑块激活器中。php创建类-

class Responsive_Slider_Activator {

    public static function activate() {
         //do your codes to execute upon activation

    }
}
和类响应滑块去激活器。php创建另一个类-

class Responsive_Slider_Deactivator {

    public static function deactivate() {
         //do your codes to execute upon deactivation

    }
}
Step-2: 在主插件文件中创建函数并注册两个挂钩-

// this code runs during plugin activation
function activate_responsive_slider() {   

   require_once plugin_dir_path( __FILE__ ) . \'includes/class-responsive-slider-activator.php\';

   Responsive_Slider_Activator::activate();
}

register_activation_hook( __FILE__, \'activate_responsive_slider\' );


// this code runs during plugin deactivation
function deactivate_responsive_slider() {

   require_once plugin_dir_path( __FILE__ ) . \'includes/class-responsive-slider-deactivator.php\';

   Responsive_Slider_Deactivator::activate();
}

register_deactivation_hook( __FILE__, \'deactivate_responsive_slider\' );
就是这样。

N、 B.根据您的兴趣,我想指出,有一些基本任务可以通过激活和停用挂钩来完成,如:

验证激活时的其他依赖插件

SO网友:CodeMascot

好了,我有以下更好的方法-

// in the main plugin file
define( \'PLUGIN_BASE_FILE\', __FILE__ );

class MainClass {
    public static function init() {
        register_activation_hook( PLUGIN_BASE_FILE, array( \'MainClass\', \'install\' ) );
    }

    public static function install() {
        // Do what ever you like here.
    }
}

MainClass::init();
另一种方法是定义一个类,然后通过__construct 方法创建值为的属性__FILE__. 呼叫register_activation_hook 在init函数中。如下所示-

class MainClass {

    public $file;

    public function __construct( $file ) {
        $this->file = $file;
    }

    public function init() {
        register_activation_hook( $this->file, array( $this, \'install\' ) );
    }

    public function install() {
        // Do what ever you like here.
    }
}

// This part must have to be done in main plugin file.
$class = new MainClass(__FILE__);
$class->init();
但是,这个实例化必须在插件主文件中完成。

希望这有帮助。

结束

相关推荐