本节仅作为一个参考. 网上大部分人建议不要将更新的trigger设置在设置页面, 应该在插件启动时候自动执行更新. 下面的过程将是: 用户正常更新插件, 然后通过查看设置页面检查最近更新, 如果希望更新, 点击Upgrade将执行更新.
首先, 我们在latex2html.php
中定义当前版本号
class active_deactive_class
{
protected static $instance;
const l2h_VER='2.0.0'; // To update edit: includes/admin_settings.php
然后, 在includes/admin_settings.php
添加Upgrade小节用以显示具体的更新信息以及Version小节来显示版本信息, 到Welcome
页面:
/**
* Welcome Screen
*/
// We must declare the welcome_page if you want Submit on welcome page
register_setting( 'l2h_welcome_page', 'l2h_upgrade_options' );
add_settings_section(
'l2h_pluginPage_section_welcome',
__( 'Let us rock!<hr >', 'val2h' ),
array( $this, 'l2h_settings_wellcome_callback' ),
'l2h_welcome_page'
);
/**
* Upgrade Settings
*/
$this->upgrade_options=get_option('l2h_upgrade_options'); //maybe you need initialize the version number for a new install in plugin activte function
$ver = get_option('l2h_upgrade_options')['VER'];
$ver_str = $this->l2h_upgrade_vernum($ver, null , true);
add_settings_section(
'l2h_upgradefrom_' . $ver_str,
__( 'Upgrade notes<hr />', 'val2h' ),
array($this, 'l2h_upgradefrom_'. $ver_str . '_callback'),
'l2h_welcome_page'
);
/**
* Version section
*/
add_settings_section(
'l2h_pluginPage_section_version_info',
__( 'Version infomation<hr >', 'val2h' ),
null,
'l2h_welcome_page'
);
add_settings_field(
'VER',
__( 'Current version: ' , 'val2h' ),
array( $this, 'l2h_disable_input_render' ),
'l2h_welcome_page',
'l2h_pluginPage_section_version_info',
array(
'field' => 'VER'
)
);
add_settings_field(
'VER-dev',
__( 'Newest version: ', 'val2h' ),
array( $this, 'l2h_disable_input_render' ),
'l2h_welcome_page',
'l2h_pluginPage_section_version_info',
array(
'field' => 'VER-dev'
)
);
这里Version小节的两个field是通过l2h_disable_input_render
来渲染的. 注意在Upgrade小节, 我们用了一个版本函数l2h_upgrade_vernum
, 他的定义如下
/**
* The upgrade_ver_num function
*/
public function l2h_upgrade_vernum($ver, $type=null, $string = false )
{
$ver_array = explode('.', $ver);
if( $string ){
//means we return the version string (without dots)
return implode( '', $ver_array );
}else{
switch ($type) {
case 'main':
$ver_array=[ ++$ver_array[0], 0, 0];
break;
case 'sub':
$ver_array=[$ver_array[0], ++$ver_array[1], 0];
break;
default:
$ver_array[2]+=1;
}
return implode( '.', $ver_array);
}
}
它有三个参数, 第一个$ver
是当前版本号, 第二个是$type
描述升级类型是main|sub|default
. 假设$ver='1.2.1'
则 main
将返回2.0.0
, 而sub
将返回1.3.1
, default
将返回1.2.2
.
最后, 所有的更新都是通过upgrade小节的call back实现的l2h_upgradefrom_'. $ver_str . '_callback()
. 因此, 如果当前版本是1.2.1
要升级成2.0.0
则我们的callback函数为
public function l2h_upgradefrom_121_callback()
{
$upgrade_options = get_option( 'l2h_upgrade_options' );
if( $upgrade_options['VER']>'1.2.1' )
return;
if( $upgrade_options['upgrade_confirm'] ){
// Do the upgarde: delete old options and so on
// We already upgraded, so set the upgrade_confirm to false
$upgrade_options['upgrade_confirm']=false;
// Set the new version
$upgrade_options['VER']= $this->l2h_upgrade_vernum($upgrade_options['VER'], 'main');
update_option('l2h_upgrade_options', $upgrade_options);
}else{
if( $upgrade_options['VER'] == '1.2.1' )
{
// display the feature of this update
}
}
}
最后, 我们应该注意到, upgrade_confirm
这个值并没有在前面设置, 其实他是放在includes/admin_page.php
中的:
<form action='options.php' method='post'>
<?php
if( $this->active_tab == 'welcome' ){
// This prints out all hidden setting fields
@settings_fields( 'l2h_welcome_page' );
echo "<input type='hidden' name='l2h_upgrade_options[upgrade_confirm]' value='1' />";
@do_settings_sections( 'l2h_welcome_page' );
if( get_option('l2h_upgrade_options')['VER'] < active_deactive_class::l2h_VER ){
@submit_button('Upgrade');
}
}else{
@settings_fields( 'l2h_setting_page' );
@do_settings_sections( 'l2h_setting_page' );
@submit_button();
}
?>
</form>
下一次, 若要从2.0.0
更新, 则只需放在前面的l2h_upgradefrom_121_callback
写一个l2h_upgradefrom_121_callback()
函数即可.
网友评论