2017-06-23 164 views
0

當主題設置被用戶更新時,我的主題創建一個css文件。這工作沒有問題。WordPress:安裝主題更新時掛鉤

現在我還需要創建css文件,當主題從儀表板內更新或發生自動更新時。

我已經基於這些例子看着upgrader_process_completeupgrader_post_installhttps://codex.wordpress.org/Plugin_API/Action_Reference/upgrader_process_completehttps://wordpress.stackexchange.com/questions/215063/limit-filter-upgrader-post-install-to-a-single-plugin但由於某些原因,我的功能沒有被後,我更新了主題解僱。

以下代碼位於我的主題的functions.php中。

function create_css_file() { 
    //code to create css file 
} 

function my_upgrade_function($options) { 
    create_css_file(); 
} 
add_action('upgrader_process_complete', my_upgrade_function, 10, 2); 

//I also tried this. No luck 
add_filter('upgrader_post_install', my_upgrade_function, 100, 0); 

我是否缺少一些基本的東西?

更新#1: 我以add_action('upgrader_process_complete', my_upgrade_function, 150); 現在似乎工作降低優先級,但是當create_css_file函數被調用,它使用以前的版本,而不是新安裝的版本。當我檢查創建的CSS文件時,它是新生成的,但基於舊版本。不知道爲什麼會發生。

我也將其更改爲add_action('upgrader_process_complete', my_upgrade_function, 1); - 同樣的問題。舊代碼正在使用,而不是新安裝的代碼。

更新#2: 好吧,我得出的結論,這兩個,upgrader_process_completeupgrader_post_install,而舊的主題仍安裝,哪一種失敗的全部目的都被解僱。

我很快跑了一個測試,在那裏我刪除了整個upgrader_process_complete部分,並將其上傳到我的私人存儲庫。然後我轉到主題並在儀表板中對其進行了更新,但upgrader_process_complete仍然被解僱,再次基於已安裝的主題創建了一個css文件,而不是新安裝的主題。但正如我所說,我實際上刪除了整個upgrader_process_complete代碼部分,所以它不應該首先解僱。

這使我相信,upgrader_process_complete被解僱,而舊的主題仍然安裝。

這使我回到原點。如何在主題更新成功安裝後調用函數?

回答

0

有一個類似的問題,我已決定爲主題的版本存儲在一個選項,並檢查它針對當前主題版本:

add_action('after_setup_theme', 'PREFIX_check_theme_version'); 
function PREFIX_check_theme_version() { 

    $current_version = wp_get_theme()->get('Version'); 
    $old_version = get_option('PREFIX_theme_version'); 

    if ($old_version !== $current_version) { 
    // do some cool stuff 
    create_css_file(); 

    // update not to run twice 
    update_option('PREFIX_theme_version', $current_version); 
    } 
} 

你當然應該取消對主題停用的選項:

add_action('switch_theme', 'PREFIX_options_removal'); 

function PREFIX_options_removal() { 
    delete_option('PREFIX_theme_version'); 
} 

這是哈克,但能夠完成任務