You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

工作日时段禁用WordPress插件更新问题求助

问题分析与解决方案

核心问题诊断

  1. wp-config.php中使用add_filter无效:WordPress加载wp-config.php时,钩子系统尚未初始化,因此添加的auto_update_plugin过滤不会被触发,这是插件仍在中午更新的主要原因。
  2. 常量定义逻辑不完整:仅在工作时段定义常量,非工作时段常量未定义,导致functions.php中访问时抛出"Undefined constant"错误。
  3. 时间比较存在歧义:直接用数字比较时间字符串(如700 vs 0700)可能导致判断逻辑出错。

分步解决方案

1. 修正wp-config.php的常量定义

将原有条件定义常量的代码替换为以下内容,确保所有时段都定义常量,且时间比较更准确:

// 获取当前时间(24小时制字符串,格式为Hi,例:0700、1200、2200)
$current_time = current_datetime()->format('Hi');
// 工作时段(7:00-22:00)禁用自动更新
$disable_updates = ($current_time > '0700' && $current_time < '2200');

// 全局禁用自动更新器(工作时段生效)
define('AUTOMATIC_UPDATER_DISABLED', $disable_updates);
// 禁用核心自动更新(全局生效,若需时段控制可移至functions.php)
define('WP_AUTO_UPDATE_CORE', false);

/* That's all, stop editing! Happy publishing. */

2. 在functions.php中添加时段控制的更新过滤

将插件/主题的自动更新过滤逻辑移至functions.php(钩子系统已初始化,过滤会生效):

// 按时段禁用插件自动更新
add_filter('auto_update_plugin', function($update, $plugin) {
    $current_time = current_datetime()->format('Hi');
    $disable_updates = ($current_time > '0700' && $current_time < '2200');
    return $disable_updates ? false : $update;
}, 10, 2);

// 可选:按时段禁用主题自动更新
add_filter('auto_update_theme', function($update, $theme) {
    $current_time = current_datetime()->format('Hi');
    $disable_updates = ($current_time > '0700' && $current_time < '2200');
    return $disable_updates ? false : $update;
}, 10, 2);

// 安全输出常量值到错误日志(避免未定义报错)
add_action('init', function() {
    // 输出AUTOMATIC_UPDATER_DISABLED状态
    error_log(
        defined('AUTOMATIC_UPDATER_DISABLED') 
            ? 'AUTOMATIC_UPDATER_DISABLED: ' . (AUTOMATIC_UPDATER_DISABLED ? 'true' : 'false')
            : 'AUTOMATIC_UPDATER_DISABLED is not defined'
    );
    
    // 输出WP_AUTO_UPDATE_CORE状态
    error_log(
        defined('WP_AUTO_UPDATE_CORE') 
            ? 'WP_AUTO_UPDATE_CORE: ' . (WP_AUTO_UPDATE_CORE ? 'true' : 'false')
            : 'WP_AUTO_UPDATE_CORE is not defined'
    );
});

3. 验证cron任务调度

WordPress自动更新依赖cron任务,可通过以下方式确认:

  • 安装WP Crontrol插件查看cron任务列表,找到wp_version_check、wp_update_plugins等任务的执行时间。
  • 确保更新任务仅在非工作时段(22:00-次日7:00)触发,避免任务调度在工作时段执行。

补充说明

Wordfence显示"工作日时段更新已被禁用"是因为它仅检测了AUTOMATIC_UPDATER_DISABLED常量的设置,但未验证过滤钩子的有效性。修正上述代码后,过滤钩子会真正拦截工作时段的插件更新请求,避免维护页面和通知邮件的触发。

内容的提问来源于stack exchange,提问作者Johnny Craig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 20:47:20