下载帮

您现在的位置是:首页 > CMS教程 > WordPress

WordPress

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)

	?>

 

余斗推荐使用第三种方法。

文章评论