WordPress文章定时发布失败解决方案
2020-04-24 08:38WordPress
前面,余斗分享了一款WordPress批量定时发布文章插件DX-auto-publish,可以用来安排定时发布文章。但是,使用之后,余斗发现有些时候定时发布不能生效,显示为:
有的时候能定时发布,有的时候定时发布失败,余斗查了下,发现这是因为WordPress默认发布文章的时间是0.01秒,一旦超过这个时间而没有发布成功,同理,定时发布文章如果在0.01秒内无响应那么定时发布就会失败。
如何解决Wordpress定时发布失败呢?有三个解决方法:
一、查看是否是时区设置错误
后台-设置-常规,找到时区,将时间格式设置一下,我们国内的时间是UTC+8,余斗选择的是上海,大家根据自己的服务器所在位置调整。
如果设置好时间之后也没有效果,则需要接下来的两种方法可以解决。
二、修改/wp-includes/cron.php 系统文件
打开wp-includes目录下面的cron.php文件,找到“timeout”代码,大概在第293行:
$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-http.php */
'sslverify' => apply_filters( 'https_local_ssl_verify', false )
)
) );
wp_remote_post( $cron_request['url'], $cron_request['args'] );
}
将其中的0.01修改为大点的数值,余斗就修改为10.00,大家自行根据情况修改。
余斗不是很推荐这种方法,因为WordPress版本更新后,你需要再次修改这个文件,比较麻烦。
三、修改functions.php文件
直接将以下代码添加到 当前使用主题的functions.php 文件的最后面:
<?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)
?>
余斗推荐使用第三种方法。
很赞哦! ()