问题描述
从我对 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。