
WordPress 定时发布失败(Missed Schedule),核心原因是 WP-Cron 伪定时依赖访客触发、服务器时区 / 时间不准、插件 / 缓存冲突、主机限制。无插件、纯代码方案。
二、根源根治(永久解决,推荐)
方案 1:修改 WP-Cron 超时(虚拟主机首选,无插件)
WP 默认timeout=0.01秒,虚拟主机响应慢就触发失败,改长一点:
1、备份wp-includes/cron.php
2、找到(约 322 行):
3、把0.01改成10.0(10 秒),保存上传,解决 90% 虚拟主机超时问题。
php
$cron_request = apply_filters( 'cron_request', array(
'url' => add_query_arg( 'doing_wp_cron', $doing_wp_cron, site_url( 'wp-cron.php' ) ),
'key' => $doing_wp_cron,
'args' => array(
'timeout' => 0.01, // 改这里
'blocking' => false,
'sslverify' => apply_filters( 'https_local_ssl_verify', false )
)
), $doing_wp_cron );
方案 2:替换为真实服务器 Cron(最稳定,虚拟主机 / 云服务器通用)
WP-Cron 是 “访客触发”,没人访问就不执行;换成服务器级定时任务,强制每 5 分钟跑一次:
1、先禁用 WP 伪 Cron:wp-config.php加:
php
define('DISABLE_WP_CRON', true);
define('WP_CRON_LOCK_TIMEOUT', 120);
方案 3:代码自动补发(无插件、纯主题 /functions)
php
// 修复WordPress定时发布失败 Missed Schedule
add_action('init', 'fix_missed_scheduled_posts');
function fix_missed_scheduled_posts() {
if (!wp_next_scheduled('fix_missed_schedule_hook')) {
wp_schedule_event(time(), 'hourly', 'fix_missed_schedule_hook');
}
}
add_action('fix_missed_schedule_hook', 'publish_missed_scheduled_posts');
function publish_missed_scheduled_posts() {
global $wpdb;
$now = current_time('mysql');
$posts = $wpdb->get_results($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_status = 'future' AND post_date_gmt < %s",
$now
));
foreach ($posts as $post) {
wp_publish_post($post->ID);
}
}