问题背景
在 WordPress 中,有时会遇到定时发布文章功能失效的问题。文章状态停留在“定时发布”,但到了预定时间却未能自动发布。这通常是由于 WordPress 在执行定时任务(Cron)时,向自身发送的 HTTP 请求超时或被中断导致的。
解决方案
无需修改 WordPress 核心文件,我们可以通过添加一小段代码到主题的 functions.php 文件或使用代码片段插件来解决此问题。
核心思路是:通过 WordPress 的 cron_request 过滤器,增加执行定时任务时内部 HTTP 请求的超时时间,确保请求有足够的时间完成。
实现代码
将以下代码添加到您当前主题的 functions.php 文件末尾:
/**
* 解决 WordPress 定时发布文章失败的问题
* 通过增加 Cron 请求的超时时间
*/
function wp_fix_scheduled_post_failure( $request ) {
// 将内部请求的超时时间设置为 2 秒
$request['args']['timeout'] = 2;
return $request;
}
add_filter( 'cron_request', 'wp_fix_scheduled_post_failure' );
代码说明
wp_fix_scheduled_post_failure: 自定义函数名,用于修改 Cron 请求的参数。$request['args']['timeout'] = 2;: 此行代码将 WordPress 内部 Cron 系统发起 HTTP 请求时的超时时间设置为 2 秒。默认的超时时间可能较短,在某些服务器环境下容易导致请求在完成前就中断。add_filter( 'cron_request', 'wp_fix_scheduled_post_failure' );: 将我们的函数挂载到cron_request过滤器上,确保每次执行定时任务时都会应用这个修改。
参数调整
如果设置为 2 秒后问题依然存在,可以尝试将这个值适当增大,例如改为 5 或 10:
$request['args']['timeout'] = 5; // 或 10
请注意,不建议将此值设置得过大(如超过 30 秒),以免长时间阻塞其他进程。
其他注意事项
- 保存文件: 修改
functions.php后,请确保保存更改。 - 缓存插件: 如果您使用了对象缓存或页面缓存插件,在测试定时发布功能时,建议先清空缓存。
- 服务器 Cron: 对于更稳定的定时任务执行,推荐配置服务器的系统级 Cron 来定期触发 WordPress 的 Cron 系统(即设置
WP_CRON为 false 并使用真正的 Cron 任务)。但这属于更高级的服务器配置。 - 代码片段插件: 如果您不熟悉编辑主题文件,可以使用如 “Code Snippets” 这类插件来安全地添加和管理此类功能代码。
通过以上方法,通常可以解决因请求超时导致的 WordPress 文章定时发布失败问题。