如何让两个类似的功能更有效率

时间:2016-08-19 作者:Benbodhi

我有两个非常相似的函数,一个用于插件升级过程,一个用于插件激活过程-我两者都有,因此如果用户使用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);

1 个回复
最合适的回答,由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);
希望这能有所帮助。