問題描述
從我對 WordPress 更新核心和插件的理解是,每 12 個小時,它會出來並尋找更新。什麼時候設置?初始安裝 12 小時?我問這個是因為使用插件 auto-update 過濾器 add_filter( 'auto_update_plugin' ); 你理論上只允許插件在某些時間之間進行更新,但是如果那個特定的時間不屬於那個 12 小時的窗口,那麼插件永遠不會被更新。
因此,在我的標題中留下這個問題是怎麼會改變 WordPress 尋找更新的頻率,或者如何指定特定的時間到 auto-update?
對於那些感興趣的人來説,這是我一直在搞砸的過濾器,檢查如果是星期一到星期五上午 8 點 – 下午 5 點:
function maybe_update_plugins(){
date_default_timezone_set('Your Timezone Here');
$localAssoc = localtime(time(), true);
$update = false;
/***
/* tm_wday[0] = Sunday
/* tm_wday[6] = Saturday
***/
if(
$localAssoc['tm_wday'] > 0 && $localAssoc['tm_wday'] < 6 &&
$localAssoc['tm_hour'] > 7 && $localAssoc['tm_hour'] < 17
){
$update = true;
}
return $update;
}
add_filter( 'auto_update_plugin', 'maybe_update_plugins' );
編輯作為一個整齊的 sidenote,它看起來像這樣的過濾器是運行每次插件更新,多個插件更新,多次運行的過濾器
最佳解決方案
你是正確的,Wordpress 每 12 小時檢查核心和插件的更新,但更好的方法是:如果上次更新超過 12 小時前檢查更新。
12 小時的設置在 wp-includes/update.php 中硬編碼
最後更新的日期存儲在 wp_options 表中,選項為:
_site_transient_update_core
_site_transient_update_plugins
_site_transient_update_themes
因為這個檢查在 12 小時後才會發生,而是下一次滿足條件 (至少已經過了 12 個小時),那麼你不會錯過更新。
次佳解決方案
相關功能 wp_update_plugins()和 wp_maybe_auto_update()掛接到同名的 wp-cron 事件,每天運行兩次。
邏輯上,初始計劃將從第一次運行開始。由於 wp-cron 實現 (不是真正的 cron,而是通過現場訪問而不是服務器時鐘觸發),每當實際的 wp-cron 在其到期的時間內觸發時,它也將”drift” 。
插件更新檢查也會在某些管理區域 (例如插件列表) 中更頻繁地觸發 (以便您不太可能查看過時的信息) 。
在我頭頂,我看不到優雅的方式把它放入特定的時間走廊。變化的時間表很容易,考慮到漂移不是很好。
如果這是以任何方式令人滿意的關鍵要求,那麼可能更好地使用實際的服務器 cron 和外部工具進行實際更新,例如 wp-cli 更新功能或通過 Composer 管理插件。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。