最近将【知行拾贝】的内容整合进了本站中,列为“节日”分类,因为有些内容是可预知的,所以就提前整理好文章定时发布,但每篇都是“定时发布失败”,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 插件后,定时发布文章终于正常。
我的定时发布很好用。正好手里有一批文章,每天定时发布一篇,排到了明年的五月份。
定时发布的功能太好了。
@摄影协会 你的文章储量很足呀,厉害!