问题描述
我正在尝试创建一个 WordPress 更新自动化插件。这里我有两个选项来启用和禁用更新。
- 
通过定义
 
例如: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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。