首页 Wordpress WordPress 定时发布文章失败的解决办法

WordPress 定时发布文章失败的解决办法

使用wordpress自带的定时发布文章,经常会失败。前面说过一些方法《WordPress 解决文章定时发布失败问题》,但都是在WP-CRON的基础上寻求解决办法,下面分享一个完全不依赖 WordPress 自带的定时任务(WP-Cron),最古老、最暴力、最能绕过所有 WP-Cron 限制的修复方案,直接绕开全部,把 WP 自带定时发布功能强行关闭。

一、主要功能

定时发布文章,解决原生自带定时发布文章失败问题!

二、工作原理

它用「每一次页面访问」来检查并发布,只要有人打开你的网站,它就会:
plain
1、查数据库:有没有到时间但没发布的文章
2、有就直接强制发布
3、5 分钟内只执行一次,不重复跑

三、直接上代码

php
<?php
// 防止直接访问文件
if (!defined('ABSPATH')) {
    exit;
}

// WP Missed Schedule 修复(终极稳定版)
function wpms_log() {
    echo "\n<!-- WP Missed Schedule Fix Active -->";
}
add_action('wp_head', 'wpms_log');
add_action('wp_footer', 'wpms_log');

define('WPMS_DELAY', 5);
define('WPMS_OPTION', 'wp_missed_schedule');

// 禁用原生定时发布(容易失败)
remove_action('publish_future_post', 'check_and_publish_future_post');

function wpms_init() {
    global $wpdb;

    // 5分钟内只执行一次
    $last = get_option(WPMS_OPTION, false);
    if ($last !== false && $last > (time() - (WPMS_DELAY * 60))) {
        return;
    }
    update_option(WPMS_OPTION, time());

    // 查询并发布错过的定时文章
    $scheduledIDs = $wpdb->get_col("
        SELECT ID FROM {$wpdb->posts}
        WHERE (
            (post_date > 0 AND post_date <= CURRENT_TIMESTAMP()) OR
            (post_date_gmt > 0 AND post_date_gmt <= UTC_TIMESTAMP())
        )
        AND post_status = 'future'
        LIMIT 5
    ");

    if (!empty($scheduledIDs)) {
        foreach ($scheduledIDs as $scheduledID) {
            if ($scheduledID) {
                wp_publish_post($scheduledID);
            }
        }
    }
}
add_action('init', 'wpms_init', 0);

// 禁用清理
register_deactivation_hook(__FILE__, function() {
    delete_option(WPMS_OPTION);
});
?>

四、总结

「页面触发 + 直接查库发布」的方法能稳定工作。

相关推荐

发表回复

邮箱地址不会被公开。