问题描述

从我对 WordPress 更新核心和插件的理解是,每 12 个小时,它会出来并寻找更新。什么时候设置?初始安装 12 小时?我问这个是因为使用插件 auto-update 过滤器 add_filter( 'auto_update_plugin' ); 你理论上只允许插件在某些时间之间进行更新,但是如果那个特定的时间不属于那个 12 小时的窗口,那么插件永远不会被更新。

因此,在我的标题中留下这个问题是怎么会改变 WordPress 寻找更新的频率,或者如何指定特定的时间到 auto-update?

对于那些感兴趣的人来说,这是我一直在搞砸的过滤器,检查如果是星期一到星期五上午 8 点 – 下午 5 点:

function maybe_update_plugins(){
    date_default_timezone_set('Your Timezone Here');
    $localAssoc = localtime(time(), true);
    $update = false;

    /***
    /* tm_wday[0] = Sunday
    /* tm_wday[6] = Saturday
    ***/
    if(
      $localAssoc['tm_wday'] > 0 && $localAssoc['tm_wday'] < 6 &&
      $localAssoc['tm_hour'] > 7 && $localAssoc['tm_hour'] < 17
    ){
        $update = true;
    }

    return $update;
}
add_filter( 'auto_update_plugin', 'maybe_update_plugins' );

编辑作为一个整齐的 sidenote,它看起来像这样的过滤器是运行每次插件更新,多个插件更新,多次运行的过滤器

最佳解决方案

你是正确的,Wordpress 每 12 小时检查核心和插件的更新,但更好的方法是:如果上次更新超过 12 小时前检查更新。

12 小时的设置在 wp-includes/update.php 中硬编码

最后更新的日期存储在 wp_options 表中,选项为:

_site_transient_update_core
_site_transient_update_plugins
_site_transient_update_themes

因为这个检查在 12 小时后才会发生,而是下一次满足条件 (至少已经过了 12 个小时),那么你不会错过更新。

次佳解决方案

相关功能 wp_update_plugins()wp_maybe_auto_update()挂接到同名的 wp-cron 事件,每天运行两次。

逻辑上,初始计划将从第一次运行开始。由于 wp-cron 实现 (不是真正的 cron,而是通过现场访问而不是服务器时钟触发),每当实际的 wp-cron 在其到期的时间内触发时,它也将”drift” 。

插件更新检查也会在某些管理区域 (例如插件列表) 中更频繁地触发 (以便您不太可能查看过时的信息) 。

在我头顶,我看不到优雅的方式把它放入特定的时间走廊。变化的时间表很容易,考虑到漂移不是很好。

如果这是以任何方式令人满意的关键要求,那么可能更好地使用实际的服务器 cron 和外部工具进行实际更新,例如 wp-cli 更新功能或通过 Composer 管理插件。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。