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

WordPress cron任务action钩子内filter不生效如何解决

问题根因

你写的代码不生效是WordPress钩子加载机制和Cron运行逻辑共同导致的:

  • WordPress Cron是独立的HTTP请求进程,和系统触发自动更新的请求完全隔离。你在ab_automatic_update_cron_true事件的回调里挂载过滤器,仅在当前这个跑定时任务的请求里生效,而这个请求根本不会执行插件自动更新的核心判断逻辑,过滤器没有触发时机。
  • auto_update_plugin过滤器是WordPress核心每次运行自动更新检查、判定单个插件是否允许更新时实时触发的,必须在核心触发这个过滤器之前就完成挂载,你放在定时任务回调里挂载的时机完全错位,自然不会生效。
  • 你当前代码里给add_action传了接收2个参数的配置,但定时事件回调cw_true_function根本没有定义入参,属于无意义的参数声明,不过这不是过滤器失效的核心原因。
正确实现方案

不要试图在定时任务回调里临时挂载过滤器,把逻辑拆成两部分即可:

  • 定时任务仅负责更新持久化存储的开关状态:到开启/关闭的时间点时,往WordPress options表写入对应的状态标记
  • 在functions.php全局作用域挂载auto_update_plugin过滤器,每次触发过滤器时读取存储的开关状态,返回对应的允许/禁止结果
    这种方案下,不管是用户访问请求、WordPress自动更新请求、Cron定时任务请求,只要加载主题的functions.php文件,过滤器就已经完成挂载,能正确读取到你定时设置的开关状态。
可直接使用的代码
/**
 * 定时任务回调:开启插件自动更新
 * 把你之前调度的ab_automatic_update_cron_true事件绑定到这个函数
 */
add_action('ab_automatic_update_cron_true', 'cw_set_plugin_update_enable');
function cw_set_plugin_update_enable() {
    update_option('ab_plugin_auto_update_switch', 1);
}

/**
 * 定时任务回调:关闭插件自动更新
 * 新增一个对应关闭时间点的Cron事件ab_automatic_update_cron_false绑定到这个函数
 */
add_action('ab_automatic_update_cron_false', 'cw_set_plugin_update_disable');
function cw_set_plugin_update_disable() {
    update_option('ab_plugin_auto_update_switch', 0);
}

/**
 * 全局挂载插件自动更新控制过滤器
 * 注意:这段代码必须放在functions.php全局范围,不要嵌套在任何钩子/函数内部
 */
add_filter('auto_update_plugin', 'ab_control_plugin_auto_update', 10, 2);
function ab_control_plugin_auto_update($default_update_permission, $plugin_item) {
    // 读取开关状态,默认状态设为关闭(0),你可以根据自己的需求改默认值
    $enable_update = get_option('ab_plugin_auto_update_switch', 0);
    return (bool)$enable_update;
}
注意事项
  • 如果需要同时控制主题、WordPress核心的定时自动更新,只需要额外挂载auto_update_theme、auto_update_core过滤器,回调逻辑和上面完全一致,读取同一个开关值返回即可。
  • 定时任务只需要负责修改options里的开关值,不要在定时任务回调里写任何挂载过滤器、触发更新的逻辑,避免时机错位。
  • 上线前记得清理之前绑定错误回调的Cron调度,避免重复执行无意义的代码。

内容的提问来源于stack exchange,提问作者Zaheer Bashir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:31:11