WordPress后台非官方主题升级更新提醒功能

WordPress, 转自点点 6 年前 1条评论

, , ,

WordPress自制主题的升级配置:本文适合Wordpress主题主题开发者,因为内容讨论的是如何让自制的Wordpress主题升级而不是教Wordpress用户怎样升级他们使用的主题。

 

1.准备服务器端的XML文件,示例如下:

<?xml version="1.0" encoding="UTF-8" ?>  
<notifier>  
    <latest>1.2</latest>  
    <changelog>  
        <![CDATA[ 
            <h4><strong>v1.2</strong></h4> 
            <ol> 
                <li>更新后台设置的界面</li> 
            </ol> 
            <h4><strong>v1.1</strong></h4> 
            <ol> 
                <li>更新前台的home.php和single.php</li> 
            </ol> 
            <h4><strong>v1.0</strong></h4> 
            <ol> 
                <li>更新前台显示效果</li> 
            </ol> 
        ]]> 
    </changelog>  
</notifier>

2.准备update.php,代码示例如下:

<?php   
    /**
     * WordPress主题升级示例代码  
     * www.suoling.net  
     */ 
            
    function update_notifier_menu() {     
        $xml = get_latest_theme_version(21600); // 告诉函数缓存远程调用6个小时=21600秒   
        $theme_data = get_theme_data(TEMPLATEPATH . '/style.css'); // 获取当前版本的style.css   
                 
        if(version_compare($theme_data['Version'], $xml->latest) == -1) {   
            add_dashboard_page( $theme_data['Name'] . '主题升级', $theme_data['Name'] . '<span class="update-plugins count-1"><span class="update-count">现在升级?</span></span>', 'administrator', strtolower($theme_data['Name']) . '-updates', update_notifier);   
        }   
    }     
            
    add_action('admin_menu', 'update_notifier_menu');   
            
    function update_notifier() {    
        $xml = get_latest_theme_version(21600); // 告诉函数缓存远程调用6个小时=21600秒   
        $theme_data = get_theme_data(TEMPLATEPATH . '/style.css'); // 获取当前版本的style.css?>   
                 
        <style>   
            .update-nag {display: none;}   
            #instructions {max-width: 800px;}   
            h3.title {margin: 30px 0 0 0; padding: 30px 0 0 0; border-top: 1px solid #ddd;}   
        </style>   
            
        <div class="wrap">   
                 
            <div id="icon-tools" class="icon32"></div>   
            <h2><?php echo $theme_data['Name']; ?> 主题升级</h2>   
            <div id="message" class="updated below-h2"><p><strong> <?php echo $theme_data['Name']; ?> 已经有新版本了,</strong> 您现在使用的版本是: <?php echo $theme_data['Version']; ?> ,现在要升级到新版本:<?php echo $xml->latest; ?>。</p></div>   
                     
            <img style="float: left; margin: 0 20px 20px 0; border: 1px solid #ddd;" src="<?php echo get_bloginfo( 'template_url' ) . '/screenshot.png'; ?>" />   
                     
            <div id="instructions" style="max-width: 800px;">   
                <h3>升级下载与介绍</h3>   
                <p><strong>注意:</strong> 请做好下面这个文件夹的<strong>备份</strong> : <strong>/wp-content/themes/<?php echo strtolower($theme_data['Name']); ?>/</strong></p>   
                <p>请登录您的账户, 到 <strong>下载</strong> 区域下载。</p>   
                <p>解压zip压缩包,找到解压后的文件夹,然后将这个文件夹下的所有文件FTP上传覆盖 <strong>/wp-content/themes/<?php echo strtolower($theme_data['Name']); ?>/</strong> 下的所有文件。</p>   
                        
            </div>   
                     
                <div class="clear"></div>   
                     
            <h3 class="title">更新日志</h3>   
            <?php echo $xml->changelog; ?>   
            
        </div>   
                 
    <?php }    
            
    // 这个函数接收开发者服务器上的XML文件内容,以查看是否有新的更新   
    // 鉴于主题使用者用户体验的原因,这个函数会在服务器缓存那个XML文件内容X秒($interval)   
    function get_latest_theme_version($interval) {   
        // 远程XML文件的位置   
        $notifier_file_url = 'http://api.suoling.net/notifier.xml';   
        $db_cache_field = 'contempo-notifier-cache';   
        $db_cache_field_last_updated = 'contempo-notifier-last-updated';   
        $last = get_option( $db_cache_field_last_updated );   
        $now = time();   
        // 检查缓存   
        if ( !$last || (( $now - $last ) > $interval) ) {   
            // 缓存不存在或者太老,就刷新   
            if( function_exists('curl_init') ) { // 如果cURL可用,就用它   
                $ch = curl_init($notifier_file_url);   
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   
                curl_setopt($ch, CURLOPT_HEADER, 0);   
                curl_setopt($ch, CURLOPT_TIMEOUT, 10);   
                $cache = curl_exec($ch);   
                curl_close($ch);   
            } else {   
                $cache = file_get_contents($notifier_file_url); // 如果不可用,就用file_get_contents()   
            }   
                     
            if ($cache) {              
                // 已经得到结果了   
                update_option( $db_cache_field, $cache );   
                update_option( $db_cache_field_last_updated, time() );             
            }   
            // 读取缓存文件   
            $notifier_data = get_option( $db_cache_field );   
        }   
        else {   
            // 缓存文件足够新,就读取它   
            $notifier_data = get_option( $db_cache_field );   
        }   
                 
        $xml = simplexml_load_string($notifier_data);    
                 
        return $xml;   
    }   
            
    ?>

3.在主题functions.php中包含这个文件:

include 'update_notifier.php';

4.还有最关键的一步:权限检查,这一步就先不介绍了,留着你自己探索吧!

Via:http://suoling.net/wordpress-theme-update/


2019.10.12更新

以上代码距今天也有6年的时间了,很多函数WordPress都放弃也不管用了。而且上面get_latest_theme_version这个函数我本地测试怎么都不行,不知道是不是需要服务器的支持,所以我今天更改了一下将上面update.php改成这样的:

hjyl_update_theme_option
hjyl_update_theme_option

<?php
/**
 *@Wordpress后台非官方主题升级更新提醒功能
 *@author:皇家元林
 *@Author URI: https://hjyl.org/ 
 */ 
define( 'XML_FILE', 'https://hilau.com/wp-content/themes/HJYL_HILAU-master/check_update.xml' ); //xml格式和上面介绍的一样,这里改成你的主题xml信息地址 
function update_notifier_menu() {
		$notification = 1; //提示信息
	if (function_exists('simplexml_load_string')) {
	    $xml = simplexml_load_file( XML_FILE );
		$new_version = $xml->latest;
		$new_version = str_replace('.','',$new_version);
		$theme_data = wp_get_theme();
		$theme_version = $theme_data['Version'];
		$theme_version = str_replace('.','',$theme_version);
		if( $new_version > $theme_version ) {
			if(function_exists('add_menu_page')) {
				add_menu_page(__('主题更新', 'HJYL_HILAU'), $notification ? sprintf(__('主题更新', 'HJYL_HILAU').'<span class="awaiting-mod">%d</span>', $notification) : __('主题更新', 'HJYL_HILAU'), 'administrator', 'theme-update-notifier', 'update_notifier');
			}
		}
	}	
}
add_action('admin_menu', 'update_notifier_menu');  
function update_notifier() {
	$xml = simplexml_load_file( XML_FILE );
	$new_version = $xml->latest;
	$theme_data = wp_get_theme(); 
	$changelog = $xml->changelog;
	?>
	<div class="wrap">
		<div id="icon-tools" class="icon32"></div>
		<h2><?php _e('HJYL_HILAU 主题升级', 'HJYL_HILAU'); ?></h2>
	    <div id="message" class="error below-h2"><p><strong><?php _e('HJYL_HILAU 有新版本啦!', 'HJYL_HILAU'); ?></strong>    <?php _e('当前版本', 'HJYL_HILAU'); ?><?php echo $theme_data['Version']; ?>,      <?php _e('请升级到', 'HJYL_HILAU'); ?> <?php echo $new_version; ?>。</p></div>
		<img class="image-notifier-img" src="<?php echo get_template_directory_uri() . '/screenshot.png'; ?>" width="400" height="300" />
		<div id="instructions">
		    <h3><?php _e('下载升级', 'HJYL_HILAU'); ?></h3>
		    <p style="color:#DD4B39"><?php _e('提示:请在升级前备份数据!', 'HJYL_HILAU'); ?></p>
		    <p><a href="https://github.com/ylgod/HJYL_HILAU/archive/master.zip" class="button button-primary" target="blank"><?php _e('下载 HJYL_HILAU', 'HJYL_HILAU'); ?> <strong><?php echo $new_version;?></strong></a></p>
			<h3 class="title"><?php _e('升级日志:', 'HJYL_HILAU'); ?></h3>
			<?php echo $changelog; ?>
		</div>
	</div>
<?php } 

?>

这个版本只有提醒功能,然后点击下载链接,自己上传到空间,完成升级。

支付宝打赏微信打赏

如果此文对你有帮助,欢迎打赏作者。

1条评论

    发表评论

    欢迎回来 (打开)

    (必填)

    4752