问题描述

我有一个 Wordpress 2.7.x 安装程序,我想迁移到最新版本 3.2.1,但是我需要做一个 stepped-upgrade 一些插件需要一个旧版本 (3.0.6 IIRC) 。

不过 Wordpress 只是为我提供了升级到最新版本。有没有办法 – 优先于管理员 – 将核心更新为特定版本?还是我要手动升级?

有没有办法告诉 wordpress 核心升级器哪个版本选择?最近才下载一个 zip,对吧?

最佳解决方案

您可以挂接 option_update_core 并编辑更新 url,作为插件,您可以做这样的事情 (记住在更新 wordpress 后禁用插件)

add_filter('option_update_core','wpse_26750');
add_filter('transient_update_core','wpse_26750');
function wpse_26750($options){
    global $wp_version;
    $updates=array(
        '2.5'=>'http://wordpress.org/wordpress-2.5.zip',
        '2.7.1'=>'http://wordpress.org/wordpress-2.7.1.zip',
        '2.8'=>'http://wordpress.org/wordpress-2.8.zip',
        '2.8.1'=>'http://wordpress.org/wordpress-2.8.1.zip',
        '2.8.3'=>'http://wordpress.org/wordpress-2.8.3.zip',
    );

    $currentUpdate=$options->updates[0];
    //Add Previous updates skipping the ones already passed
    foreach($updates as $version=>$updateUrl){
        if( version_compare($wp_version,$version) < 0){
            $update=new StdClass();
            $update->response='upgrade';
            $update->url='http://wordpress.org/download/';
            $update->package=$updateUrl;
            $update->current=$version;
            $update->locale=$options->updates[0]->locale;
            $options->updates[]=$update;
        }
    }
    unset($options->updates[0]);
    //Restore latest update
    $options->updates[]=$currentUpdate;
    return $options;
}

从 2.8 开始,您也需要挂接 transient_update_core,因为使用 get_transient 而不是 get_option 此外,还有版本检查,所以没有显示低于本身的版本。唯一的 (主要?) 问题是,需要手动添加版本列表。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。