问题描述

我正在尝试创建一个 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。