WordPress定时发布文章功能不稳定,经常预发布失败,怎么办?

内容纲要

做网站基本要求,就是要每天(或者每隔几天)就要发布新的文章,长期没有新文章发布的网站,会慢慢地被搜索引擎忽视。WORDPRESS系统有一个非常吸引人的功能,可以向未来发布文章,即文章定时发布功能。

在发布文章的时候,将发布时间设定为未来的一个时间,时间一到,自动发布。这个功能如果能够好好用,可以很好地保证我们的网站每天都能够有一篇新的文章,同时还能平衡我们的时间和精力投入。比如,理论上完全可以集中一个时间段,将未来一个星期的文章全部准备好,然后设定好发布时间,每隔一天自动发布一篇。

不过,默认的WORDPRESS系统,文章定时发布功能一个缺陷,发布动作到时间有可能失败,具体原因我说不清楚,这个太专业,需要PHP和WP Cron相关方面的深厚知识。

那么怎么解决wordpress定时发布文章失败这种情况呢?有三种方法,如下。

第一、WP Missed Schedule插件

可以安装插件  MY Missed Schedule  或者  WP Missed Schedule Posts且不需要任何设置直接搜索后激活启动安装即可。

建议看清楚两个插件的说明,两者作用原理不同,其中一个插件时访客流量网站时,去检查是否有发布失败的情况,如有,则立即发布,另外一个插件的原理则是每隔一定时间去检查是否存在定时发布失败,如存在,则立即发布,检查的间隔时间,可以在插件中设置,默认20分钟。

第二、调整wordpress参数

打开wp-includes目录下面的cron.php文件, 找到"timeout"代码。

将TimeOuT原来的0.01,数据调大就可以了。

注意事项:因为修改的是wordpress的程序文件,需要在每次升级wordpress后再次修改合格参数。

第三、在主题的function文件中添加代码

这个方法,atdevin.com的站长没有尝试过,各位可以自行尝试,尝试前请做好备份。

<?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)
?>