我有两个非常相似的函数,一个用于插件升级过程,一个用于插件激活过程-我两者都有,因此如果用户使用WordPress仪表板进行更新,或者完全删除插件或覆盖插件,那么这些函数将启动。它们工作得很好,我使用条件调用包含它们的文件,因此它们只为从我的插件的早期版本升级的任何人运行。
我的问题是:我如何才能使这些更有效?
它们可以工作,但我觉得没有必要重复任何代码,每个函数的内容都是相同的。
/**
* Update plugin settings on activate
*/
function prefix_plugin_activate() {
$new_option = array( \'new_setting\' => \'on\' );
$existing_settings = get_option( \'existing_settings\' );
$new_settings = array_merge( $new_option, $existing_settings );
update_option( \'existing_settings\', $new_settings );
}
// register_activation_hook( __FILE__, \'prefix_plugin_activate\' );
register_activation_hook( PREFIX_PLUGIN_PATH . \'main-plugin-file.php\', \'prefix_plugin_activate\' );
/**
* Update plugin settings on upgrade
*/
function prefix_plugin_upgrade( $upgrader_object, $options ) {
$new_option = array( \'new_setting\' => \'on\' );
$existing_settings = get_option( \'existing_settings\' );
$new_settings = array_merge( $new_option, $existing_settings );
update_option( \'existing_settings\', $new_settings );
}
add_action( \'upgrader_process_complete\', \'prefix_plugin_upgrade\',10, 2);
最合适的回答,由SO网友:CodeMascot 整理而成
你已经通过了$upgrader_object
和$options
参数到prefix_plugin_upgrade
作用但实际上并没有在函数中使用这些参数。因此,您可以像下面这样合并这些函数-
/**
* Update plugin settings on activate
* Update plugin settings on upgrade
*/
function prefix_plugin_activate() {
$new_option = array( \'new_setting\' => \'on\' );
$existing_settings = get_option( \'existing_settings\' );
$new_settings = array_merge( $new_option, $existing_settings );
update_option( \'existing_settings\', $new_settings );
}
// register_activation_hook( __FILE__, \'prefix_plugin_activate\' );
register_activation_hook( PREFIX_PLUGIN_PATH . \'main-plugin-file.php\', \'prefix_plugin_activate\' );
add_action( \'upgrader_process_complete\', \'prefix_plugin_activate\', 10, 2);
希望这能有所帮助。