WordPress不是魔法。如果您添加和动作挂钩(register_activation_hook
just add an action hook) 要让WordPress能够阅读和运行它,必须load 你的主插件文件,它不能猜测它的内容。
如果WordPress加载您的主插件文件,它将加载其中定义的所有函数(或直接包含在其中的文件中),因此您将得到致命错误。
如果要这样做,需要加载所有函数after WordPress解析了您的主插件文件,如果两个版本都被激活,则解析了这两个文件。
免费插件的主插件文件应仅包含以下内容:
add_action( \'plugins_loaded\', \'myplugin_require_everything_free\', 100 );
function myplugin_require_everything_free() {
// require all free plugin files here
}
没有更多的代码。(当然,在文件的顶部会有插件头)。
付费版本中的主插件文件应仅包含以下内容:
add_action( \'plugins_loaded\', \'myplugin_require_everything_paid\', 1 );
function myplugin_require_everything_paid() {
if ( function_exists( \'myplugin_require_everything_free\' ) ) {
remove_action( \'plugins_loaded\', \'myplugin_require_everything_free\' );
deactivate_plugins( \'abc-plugin-name-free\' );
}
// require all paid plugin files here
}
当两个文件都被解析后,这两个函数在同一个钩子上运行,但付费插件函数首先运行,因为它具有更高的优先级。
如果付费版本功能发现免费版本已激活,则会删除添加的操作免费版本文件,停用免费版本插件,并且仅after 加载包含插件函数的文件。
这样就不会发生冲突。。。