問題描述

我有一個 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。