WP_CRON不能完成任务:多站点统计

时间:2013-07-20 作者:Philipp

I already found out how to get the amount of networkwide posts 在WPMS中。到目前为止,该函数是由打开网站的用户调用的。所以每24小时重建一次。我不想让一个用户等待半分钟,直到过程完成,所以我开始使用wp\\u cron。但似乎有一个问题,因为我无法在短代码中看到结果。如果有人能看看以下几行,那就太好了:

register_activation_hook(__FILE__, \'wpms_stats_activation\');
add_action(\'wpms_stats_daily_event\', \'posts_count_func\');
register_deactivation_hook(__FILE__, \'wpms_stats_deactivation\'); 

// Start the cron on activation
function wpms_stats_activation() {
wp_schedule_event(time(), \'daily\', \'wpms_stats_daily_event\');
}

// Delete the cache and deactivate the cron
function my_deactivation() {
    wp_clear_scheduled_hook(\'wpms_stats_daily_event\');
    delete_site_transient( \'total_posts_cache\' );
}

// Count the posts of the whole network
function posts_count_func( $args ){

    global $wpdb;
    $blogs = $wpdb->get_results( $wpdb->prepare(
            "SELECT * FROM {$wpdb->blogs} WHERE  spam = \'0\' 
            AND deleted = \'0\' AND archived = \'0\' 
            ORDER BY registered DESC, 2", ARRAY_A ) );

    $original_blog_id = get_current_blog_id();

     $args = array(
        \'numberposts\'     => -1,
        \'post_type\'       => \'post\',
        \'post_status\'     => \'publish\' );
    $total_network = $draft_network = 0;
    $total_sites = 0;

    foreach ($blogs as $blog)
    {
        wp_cache_flush();
        switch_to_blog( $blog->blog_id );
        $args[\'post_status\'] = \'publish\';
        if (count(get_posts($args))<2) { continue; }
        $total_posts = count( get_posts( $args ) );
        $total_network += $total_posts;
        $total_sites += 1;

        $args[\'post_status\'] = \'draft\';

        }

        set_site_site_transient ( \'total_posts_cache\', $total_network );


 switch_to_blog( $original_blog_id );
}

//Make a shortcode which shows the amount of posts
function posts_shortcode_count_func( $atts ){
    $post_count = get_site_transient( \'total_posts_cache\' );
    return $post_count;
}
add_shortcode( \'posts\', \'posts_shortcode_count_func\' );
非常感谢!

1 个回复
SO网友:s_ha_dum

是的set_site_transient, 不set_site_site_transient.

您应该知道,单个用户仍将等待半分钟,以完成此操作。wp_cron 不按时钟运行。当用户访问站点时,它会运行。

如果您有能力创建系统cron 作业然后将回调挂接到AJAX API 操作,并使用系统cron 触发它。这应该给你一个真正的时钟时间激活,并避免强迫一些不幸的用户等待。

相关:

WordPress Cron Schedule the if and else statement
Should I use set_transient or update_option?

结束

相关推荐

wp-cron: freeze at "now"

抱歉问了这么愚蠢的问题。简单地说,我有一个wp(3.5.1版)博客,使用了一个经过大量修改的(我自己)主题。除了wp cron之外,其他一切都正常工作。列出的作业出现在(例如)crontrol中,时间流逝直到“现在”(这意味着作业应该开始)。无论如何,什么都没有发生:计划的后期冻结在“现在”,我的自定义函数冻结在“现在”,等等。如果我手动运行它,一切都正常(因此没有代码问题)。我尝试禁用wp cron(使用define(\'DISABLE_WP_CRON\', true); 并设置一个自定义wp cron