WordPress 默认调度机制中,定时发布文章的时间间隔非常短(约0.01秒),如果服务器配置较低或执行环境限制,可能导致定时任务无法按时执行,出现“定时发布失效”的情况。那么,如何解决WordPress定时发布失败的问题呢?以下三种方法供你参考:
1. 开启内存缓存,提高服务器性能
定时发布依赖于服务器资源的及时响应,低配置服务器经常无法在极短时间内完成任务,建议启用内存缓存(如Redis、Memcached等)来加速PHP执行和数据库查询,减轻服务器负载,提高定时任务成功率。
2. 修改WordPress核心文件中的cron.php
定位到网站根目录的 wp-includes/cron.php 文件,搜索 "timeout" 相关代码:
将其中的数值 0.01
修改为更大的数值,比如 10.00
,以延长任务允许的超时时间,给定时调度更多缓冲时间。
注意:
此文件属于WordPress核心文件,每当WordPress升级时,该修改将被覆盖,需要重新调整。
3. 在主题的 functions.php 文件中添加代码,自动补偿定时任务
如果不喜欢频繁修改核心文件或安装插件,可以在当前主题的 functions.php
末尾添加以下代码,手动触发和补偿定时发布的文章:
- //解决 WordPress 定时发布失败的问题 - https://www.dujin.org/14689.html
- <?php
- if(!function_exists('add_action')){
- header('Status 403 Forbidden');header('HTTP/1.0 403 Forbidden');header('HTTP/1.1 403 Forbidden');exit();}
- ?>
- <?php
- function wpms_log(){
- echo"\n<!--Plugin WP Missed Schedule 2011.0920.2011 Active-->";
- }
- add_action('wp_head','wpms_log');
- add_action('wp_footer','wpms_log')
- ?>
- <?php
- 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)
- ?>