下载帮

您现在的位置是:首页 > 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)
?>

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

文章评论