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

最近将【知行拾贝】的内容整合进了本站中,列为“节日”分类,因为有些内容是可预知的,所以就提前整理好文章定时发布,但每篇都是“定时发布失败”,WordPress 的定时发布功能好看不好用。

网友们都说大多数定时发布文章失败的原因是主机访问速度慢,发布超时造成的,也有说插件冲突造成。按某位技术君的说法是:

通常,当你安排要在以后发布 WordPress 文章时,WordPress 使用一种称为“ Cron”或“ WordPress Cron ”的技术来按时自动发布你的文章。但是,如果你的 WordPress 托管服务器或插件正在影响 Cron 作业,则 WordPress 将错过计划的任务。

网上给出了几种解决的办法,粗略介绍如下:

一、加大发布文章时间设置值

打开 WordPress 程序的根目录, 找到 wp-includes 目录下面的 cron.php 系统文件,找到“timeout”代码,将默认设置发布文章的时间,修改为大于0.01 的值,比如 2.00、3.00 等。(注意,请备份这个文件后再修改。)

$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,
/** This filter is documented in wp-includes/class-wp-http-streams.php */
'sslverify' => apply_filters( 'https_local_ssl_verify', false ),
),
),
$doing_wp_cron
);

WordPress 默认设置发布文章的时间为0.01,当我们定时发布时在这个秒段是无法成功的,所以要失败。

二、添加修复代码到当前主题的 functions.php 文件中

if (!function_exists( 'add_action' ) ) {
header( 'Status 403 Forbidden' );
header( 'HTTP/1.0 403 Forbidden' );
header( 'HTTP/1.1 403 Forbidden' );
exit();
}

function wpms_log() {
echo"\n";
}
add_action( 'wp_head', 'wpms_log' );
add_action( 'wp_footer', 'wpms_log' );

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

function wpms_replace() {
delete_option(WPMS_OPTION);
}

register_deactivation_hook(__FILE__,'wpms_replace');
function wpms_init() {
remove_action('publish_future_post','check_and_publish_future_post');
$last=get_option(WPMS_OPTION,false);
if (($last!==false)&&($last>(time()-(WPMS_DELAY*60))))return;
update_option(WPMS_OPTION,time());
global$wpdb;
$scheduledIDs=$wpdb->get_col("SELECT`ID`FROM`{$wpdb->posts}`"."WHERE("."((`post_date`>0)&&(`post_date`<=CURRENT_TIMESTAMP()))OR"."((`post_date_gmt`>0)&&(`post_date_gmt`<=UTC_TIMESTAMP()))".")AND`post_status`='future'LIMIT 0,5");
if (!count($scheduledIDs))return;
foreach($scheduledIDs as$scheduledID) {
if (!$scheduledID)continue;
wp_publish_post($scheduledID);
}
}
add_action( 'init', 'wpms_init', 0 );

你也可以将上面的代码复制到一个 php 文件里,放到主题的根目录下引用,比如叫 timeout.php,然后在 functions.php文件中引入,以保持主题 functions.php 文件的整洁。

/**
* 定时发布失败修复
*/
require get_template_directory() . '/timeout.php';

三、使用 Missed Scheduled Posts Publisher 插件

其实第二种方法的修复代码,就是提取自 WP Missed Schedule 插件的,但这个插件已经很久没有更新了,与新版 WordPress 会兼容问题,因此我选择了具备相同功能的 Missed Scheduled Posts Publisher by WPBeginner 插件。

此插件由国外初学者最大的 WordPress 资源网站 WPBeginner 团队开发,他们拥有多个热门插件,比如 最好的 WordPress SEO 插件 All in One SEO,最受欢迎的 WordPress SMTP 插件 WP Mail SMTP 等,技术是绝对过得硬的。

WordPress 官网下载:https://wordpress.org/plugins/missed-scheduled-posts-publisher/

我们可以直接在网站后台 插件 - 安装插件,在搜索框中键入插件名称搜索安装。

安装后,激活插件即可。该插件开箱即用,没有可供你配置的设置。

Missed Scheduled Post Publisher 插件如何工作?

该插件仅每15分钟检查一次你的网站,以查看预定的 WordPress 文章是否错过了时间表。如果找到任何错过的计划项目,则它将状态从计划状态更改为已发布。

它适用于文章,页面,产品以及你在 WordPress 网站上可能具有的任何其他自定义文章类型。

解决 WordPress 计划发布文章失败的错误

如果安装该插件后不能立即解决你网站上的定时发布错误,那么你可以尝试以下一些技巧。

1、检查你的 WordPress 时区设置

设置时区是安装 WordPress 之后要做的第一件事。但是,有时用户会错过它,而他们的 WordPress 时区与他们要用于发布和管理其网站的时区不匹配。

只需转到设置»常规页面,然后向下滚动到“时区”部分。从这里,您需要选择你的时区或要用于WordPress网站的时区。不要忘记单击“保存更改”按钮来存储你的设置。

2、清除 WordPress 缓存

如果你的 WordPress 文章仍然缺少日程安排,则可能是由于缓存插件配置不正确所致。尝试清除 WordPress 缓存,并确保正确配置了 WordPress 缓存插件以定期自动清除缓存。

3、增加 WordPress 内存限制

你的 WordPress 网站可能会遇到内存不足问题。你可以通过允许 WordPress 使用更多服务器内存来解决此问题,从而使 WordPress 更好地运行。

只需将以下代码添加到你的 wp-config.php 文件中。

define('WP_MEMORY_LIMIT', '500M');

小编使用体验

方法一和方法二都存在一个更新升级的问题,当你对 WordPress 程序或主题进行更新后,所作的修改都会被清除,你需要再次修改添加代码。方法三倒是能解决更新后失效的问题,但有些朋友担心过多的插件会影响网站的速度和稳定性。

本站采用方法三,目前安装启用 Missed Scheduled Posts Publisher 插件后,定时发布文章终于正常。


历史上的今天:

生成海报
点赞 0

2 条评论

  1. 0 我的定时发布很好用。正好手里有一批文章,每天定时发布一篇,排到了明年的五月份。
    定时发布的功能太好了。

发表评论

您的电子邮件地址不会被公开,必填项已用*标注。

相关推荐

豆瓣书影音记录在 WordPress 网站的应用

此前,小站曾创建了“观影记录”页面,是通过豆瓣读书观影记录插件(BMDB-for-WordPress),同步豆瓣网站标注的电影和书籍信息,自动添加豆瓣读书观景记录到此页面来。但随着豆瓣逐渐封闭,接口都无法使用,插件也停止运行,页面成了空白页。 最近,作者把之前这个老插件进行了升级,推出了我的书影音管理 – WP-Douban 4.0,可 ...

WordPress 网站纯代码实现“历史上的今天”文章调用方法

网站创建一年多了,文章也有500多篇了,如何让历史文章多个展现的机会,除了相关文章推荐,站长们还经常会用到“历史上的今天”功能,即在文章末端调用前几年同一天发布的文章列表。 这个功能最初是由柳城创建的 wp-today 插件实现的,这个插件已经停更多年了,其核心代码也不复杂,我们可以复制里面的代码到 WordPress 网站主 ...

WordPress 站点之间内容迁移的简单教程

昨天,我个人博客再做减法,又被我干掉一个网站,但内容被我迁移到了主博客中来,由于两个网站都是用 WordPress 博客程序搭建的,内容迁移非常方便,并且完整保留了文章、评论、标签,连图片地址都不用修改。下面我把整个迁移过程作个简单的记录。 一、源站点的预准备 源站点的内容,我分成了多个分类,如果像我一样迁移到目 ...

用老薛主机子域功能做网站备份的方法

老薛主机可以无限建站,虽然是4G的进阶段香港主机,放个5、6个网站是没问题的,所以我把原来几个老网站的数据都迁到了老薛主机上,算是做个网站备份,有些文章的内容还有用,可方便查找。 如果你要继续使用独立域名,选择老薛主机 cPanel 的附加域功能,如果你只用二级域名,则选择 cPanel 的子域功能。 1、创建子域。登录 c ...