問題描述

我正在嘗試創建一個 WordPress 更新自動化插件。這裏我有兩個選項來啓用和禁用更新。

  1. 通過定義

例如:defined( 'AUTOMATIC_UPDATER_DISABLED',true )

通過 add_filter

例如:add_filter( 'allow_major_auto_core_updates', '__return_true', 1 );

我的問題是如果我通過 define 禁用更新,並且還通過 add_filter 啓用它,哪一個將工作? add_filter 是否覆蓋’define’?或 define 覆蓋’add_filter’?

最佳解決方案

通過 Core_Upgrader::should_update_to_version()方法進行掃描,看起來我們可以覆蓋

 defined( 'WP_AUTO_UPDATE_CORE' )    // true (all), false, minor

檢查,用於設置本地布爾變量 $upgrade_dev$upgrade_minor$upgrade_major,具有以下過濾器:

...
apply_filters( 'allow_dev_auto_core_updates',   $upgrade_dev   )
...
apply_filters( 'allow_minor_auto_core_updates', $upgrade_minor )
...
apply_filters( 'allow_major_auto_core_updates', $upgrade_major )
...

所以這些過濾器在 WP_AUTO_UPDATE_CORE 常量檢查中有最後一個字。

類似地,automatic_updater_disabled 濾波器可以覆蓋 AUTOMATIC_UPDATER_DISABLED 常數檢查。

但請注意我們 can’t override the constant itself

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。