MU插件中的REGISTER_ACTIVATION_HOOK未触发

时间:2019-12-12 作者:joelanco

我有一个类设置,可以在我的mu插件上运行一些数据库脚本。

function activate_mjmc_core() {
 require_once plugin_dir_path( __FILE__ ) . \'includes/class-mjmc-core-activator.php\';
 Mjmc_Core_Activator::activate();
 Mjmc_Core_Activator::mjmc_database_version();
 Mjmc_Core_Activator::mjmc_companies_table();
 Mjmc_Core_Activator::mjmc_locations_table();
 Mjmc_Core_Activator::mjmc_companies_insert();
}

register_activation_hook( __FILE__, \'activate_mjmc_core\' );
现在,当我把它作为一个普通的插件使用时,这些功能就可以正常工作了,我必须激活它。

但是,当我在我的mu插件中使用它时,所有其他插件函数都可以工作,它只是在激活时不运行上面列出的数据库函数。对于这些数据库函数,我还需要做些什么吗?或者在另一个wordpress钩子上运行这个?

谢谢

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

MU插件不“激活”或“停用”。他们是在场还是不在场。因此,您需要一种不同的方法。一种选择是只在上执行激活功能init, 并在数据库中存储一条记录,说明是否已完成:

function activate_mjmc_core() {
    if ( \'1\' === get_option( \'mjmc_activated\' ) ) {
        return;
    }

    require_once plugin_dir_path( __FILE__ ) . \'includes/class-mjmc-core-activator.php\';

    Mjmc_Core_Activator::activate();
    Mjmc_Core_Activator::mjmc_database_version();
    Mjmc_Core_Activator::mjmc_companies_table();
    Mjmc_Core_Activator::mjmc_locations_table();
    Mjmc_Core_Activator::mjmc_companies_insert();

    update_option( \'mjmc_activated\', \'1\' );
}
add_action( \'init\', \'activate_mjmc_core\' );

SO网友:Hasan Uj Jaman

您需要切换到siite才能运行此激活挂钩。

function activate_mjmc_core() {
$current_site_id = get_current_blog_id();
switch_to_blog($current_site_id);
require_once plugin_dir_path( __FILE__ ) . \'includes/class-mjmc-core- 
activator.php\';
Mjmc_Core_Activator::activate();
Mjmc_Core_Activator::mjmc_database_version();
Mjmc_Core_Activator::mjmc_companies_table();
Mjmc_Core_Activator::mjmc_locations_table();
Mjmc_Core_Activator::mjmc_companies_insert();
restore_current_blog();
}
希望这项工作成功:D

register\\u activation\\u hook(FILE, \'激活“\\u mjmc\\u core”);

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。