没有使用wp_Schedule_Event更新自定义字段的结果

时间:2015-03-14 作者:Naresh Devineni

我最近开发了一个新闻博客。我的客户要求提供一篇文章的facebook共享计数。

我可以使用facebook api获取共享数量,但是,根据我从各处的各种问题中找到的信息,facebook限制了api调用的数量。因此,我决定每小时提取一次共享计数信息,然后使用自定义元字段更新每个帖子的共享计数信息。我用过wp_schedule_event 用于自动化。但是,下面的代码是如何工作的。

register_activation_hook( __FILE__, \'cb_fb_share_count_activation\' );
function cb_fb_share_count_activation() {
    $timestamp = wp_next_scheduled( \'cb_update_fb_share_count\' );
    if( $timestamp == false ){
       wp_schedule_event( time(), \'hourly\', \'cb_update_fb_share_count\' );
    }
}
add_action( \'cb_update_fb_share_count\', \'cb_update_count\' );
function cb_update_count(){
    $posts = get_posts(array(\'numberposts\' => -1) );
    foreach($posts as $post) {
        setup_postdata($post);
        $url = get_the_ID();
        $fbcount = json_decode( file_get_contents( \'https://api.facebook.com/method/links.getStats?urls=\'.$url.\'&format=json\' ));
        $fb_share_count = $fbcount[0]->share_count; 
        update_post_meta(get_the_ID(), \'cb_fb_share_count\', $fb_share_count);
    }
    wp_reset_postdata();
}
register_deactivation_hook( __FILE__, \'cb_delete_fb_share_count_schedule\' );
function cb_delete_fb_share_count_schedule() {
    wp_clear_scheduled_hook( \'cb_update_fb_share_count\' );
}
然后,我尝试了“wp\\u footer”来测试get\\u帖子,它正在工作。定制挂钩有什么问题?我哪里做错了?

P.S: I am aware that Wp-cron requires a page view to operate properly.

1 个回复
最合适的回答,由SO网友:cybmeta 整理而成

它认为您的问题在于您正在将帖子ID作为url参数传递给facebook API:

$url = get_the_ID();
此外,作为get_posts 返回post对象数组,可以使用以下代码:

$posts = get_posts(array(\'numberposts\' => -1) );
foreach($posts as $post) {
    $url = get_permalink( $post->ID );
    $fbcount = json_decode( file_get_contents( \'https://api.facebook.com/method/links.getStats?urls=\'.$url.\'&format=json\' ) );
    $fb_share_count = $fbcount[0]->share_count; 
    update_post_meta( $post->ID, \'cb_fb_share_count\', $fb_share_count );
}
我会更进一步,建议取消对wp_next_scheduled 在激活操作挂钩中,不需要它,因为在插件激活时,计划的事件应该不存在。最后,我建议使用wp_remote_get 而不是file_get_contents, 我认为这真的更好,对请求有更多的控制:

register_activation_hook( __FILE__, \'cb_fb_share_count_activation\' );
function cb_fb_share_count_activation() {

    wp_schedule_event( time(), \'hourly\', \'cb_update_fb_share_count\' );

}

register_deactivation_hook( __FILE__, \'cb_delete_fb_share_count_schedule\' );
function cb_delete_fb_share_count_schedule() {

    wp_clear_scheduled_hook( \'cb_update_fb_share_count\' );

}

add_action( \'cb_update_fb_share_count\', \'cb_update_count\' );
function cb_update_count(){

    $posts = get_posts(array(\'numberposts\' => -1) );

    foreach($posts as $post) {

        $url = get_permalink( $post->ID );

        $response = wp_remote_get(\'https://api.facebook.com/method/links.getStats?urls=\'.$url.\'&format=json\' );

        if( ! is_wp_error( $response ) ) {

            $fbcount = json_decode( wp_remote_retrieve_body( $response ) );


            $fb_share_count = $fbcount[0]->share_count; 

            update_post_meta( $post->ID, \'cb_fb_share_count\', $fb_share_count );

        } else {

            //Do something if it was an error comunicating with Facebook

        }

    }

}
PD:我认为这不是一个很好的方法。获取所有帖子并一个接一个地连接到Facebook,所有这些都在相同的WordPress负载中,可能会非常缓慢和激烈。

结束

相关推荐

如何在自定义主题的标题中添加附件的Facebook OpenGraph元标记?

当标题已经被调用,并且需要添加的值在正文中获得时,如何在标题中添加Facebook OpenGraph标记?这是一个高度定制的主题(我没有创建)。这是image.php 包含图像附件页的文件: <div class=\"posted-att\"> <?php echo wp_get_attachment_image($attachment_id,\'large\'); 我不知道在哪里$attachment_id 已设置。它没有设定imag