问题原因:发布超时
WordPress的定时发布(预约发布)功能失败,最常见的原因是发布请求超时。当您的网站访问量较大、服务器负载较高或网络环境不佳时,WordPress默认的极短超时时间(0.01秒)很容易导致发布任务在后台执行时失败。
解决方案:修改超时时间
无需安装插件,只需在您当前主题的 functions.php 文件中添加以下代码即可。
/**
* 修改WordPress定时任务(Cron)的请求超时时间
* @param array $arr 原始的Cron请求参数数组
* @return array 修改后的参数数组
*/
function modify_cron_request_timeout( $arr ) {
// 将超时时间设置为10秒
$arr['args']['timeout'] = 10.00;
return $arr;
}
add_filter( 'cron_request', 'modify_cron_request_timeout' );
代码说明与注意事项
- 函数名:示例中使用了更具描述性的函数名
modify_cron_request_timeout,您可以根据自己的命名习惯修改。 - 超时值:代码将超时时间从默认的0.01秒修改为10秒(
10.00)。如果您的服务器响应特别慢,可以适当增加此值(例如30秒)。 - 添加位置:请将代码添加到主题的
functions.php文件末尾的?>标签之前(如果存在该标签)。建议使用子主题进行修改,以避免主题更新时丢失更改。
工作原理
WordPress通过一个名为 wp-cron.php 的系统来处理定时任务。在触发发布任务时,它会向自身发送一个HTTP请求。核心代码中设定的默认超时时间极短:
wp_remote_post( $cron_url, array( 'timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters( 'https_local_ssl_verify', true ) ) );
上述解决方案利用了 cron_request 过滤器钩子(Filter Hook),在请求发送前拦截参数数组,并将其中的 timeout 值从 0.01 覆盖为我们设定的更合理的值(如10秒),从而给服务器足够的响应时间来完成发布操作。
其他潜在原因与检查建议
如果修改超时时间后问题依旧,请排查以下方面:
- 服务器Cron设置:确保您的服务器系统Cron已正确设置并定期访问
wp-cron.php(如果禁用了WordPress默认的“伪Cron”)。 - 插件冲突:临时停用所有插件,检查定时发布是否恢复正常,以排除插件冲突。
- 错误日志:检查服务器的PHP错误日志和WordPress调试日志,寻找相关错误信息。