WP-cron.php被触发,但未发布计划的发布

时间:2016-06-09 作者:Alocus

我是wordpress的新手。我的网站一直在发布预定的帖子,但似乎因为没有流量而停止了。所以我禁用了wp default cron,并通过cPanel设置了cron作业。

via命令wget -q -O - http://1pm.today/wp-cron.php?doing_wp_cron

usr/bin/curl --user-agent cPanel-Cron http://1pm.today/wp-cron.php?doing_wp_cron

但是运行wp cron。像这样的php似乎不会触发预定的post。

我甚至尝试从浏览器触发cron作业(不确定这是否正确)http://1pm.today/wp-cron.php?doing_wp_cron

但这些都不会触发发布任何预定帖子。像这样的cron作业应该发布计划发布吗?如果是这样的话,任何关于调试的建议都将不胜感激,我将尝试与技术支持部门合作,因为该站点位于共享主机上。

我在wp cron中添加了echo语句。php

function _get_cron_lock() {
    global $wpdb;

    $value = 0;
    if ( wp_using_ext_object_cache() ) {
        /*
         * Skip local cache and force re-fetch of doing_cron transient
         * in case another process updated the cache.
         */
        $value = wp_cache_get( \'doing_cron\', \'transient\', true );
    } else {
        $row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", \'_transient_doing_cron\' ) );
        if ( is_object( $row ) )
            $value = $row->option_value;
    }

    return $value;
}

if ( false === $crons = _get_cron_array() )
    die();

$keys = array_keys( $crons );
$gmt_time = microtime( true );
echo "$keys[0] > $gmt_time";
if ( isset($keys[0]) && $keys[0] > $gmt_time )
    die();

echo ":6c";
// The cron lock: a unix timestamp from when the cron was spawned.
$doing_cron_transient = get_transient( \'doing_cron\' );
echo "7";
输出为

1465529020 > 1465525264.31 without reaching ":6c"
所以它die()是因为

if ( isset($keys[0]) && $keys[0] > $gmt_time )

1465529020 > 1465525264.31
请问在哪里$keys[0] 来自哪里?

我猜$key[0] 是第一个cron作业的时间戳,并且$gmt_time 是当前时间,如果$key[0] 是在将来,它应该中止。

我已经有很多“错过预定”的帖子,所以我正在努力更好地理解_get_cron_array() 但我不知道wp includes/cron中发生了什么。php。

看来_get_cron_array() 与中的cron有关wp_options

SELECT *
FROM `wp_options`
WHERE `option_name` LIKE \'%cron%\'
在这一点上,我甚至更加困惑,因为我无法弄清楚一个预定的帖子是如何链接到cron作业的。

1 个回复
SO网友:Otto

函数的作用是:从数据库中获取“cron”选项。cron选项包含一个由一系列unix时间戳和操作挂钩组成的数组。

因此,当到达时间戳时,就会调用动作挂钩。

时间戳1465529020相当于2016年6月10日UTC时间凌晨3:23。

时间戳146552564相当于2016年6月10日UTC时间凌晨2:21。

因此,基本上,该操作计划在1小时2分钟后运行。这就是为什么wp cron没有运行它。现在还不是时候。

安排一篇文章在特定时间发布会在cron数组中创建一个条目,将发布时间作为键,并触发将其发布为值的操作。到达时间后,将触发操作挂钩,并发布帖子。这就是wp cron的方式。php工作正常。