列出来自多站点网络的最新评论

时间:2011-01-15 作者:Pippin

我正在寻找一个自定义SQL查询,它可以让我从WP多站点安装中获取最新的评论。

最终结果将与常规的最近评论小部件相同,但来自安装中的所有站点。

想法?

谢谢

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

好的,我根据בניית אתרים\'这里有一个解决方案,因为我对此也很感兴趣。

首先,您需要获取博客ID列表,然后get_blog_list() 已弃用,因为它似乎是“suicidal database query“:)无论如何,看起来WP 3.2中会有一个替代方案称为wp_get_sites(). So使用this 功能。我建议你通过\'sort_column => \'last_updated\' 参数,以及\'limit\' 结果是20分左右。这将使下一个查询更快。

因此:

global $wpdb;
$number = 20; // maximum number of comments to display
$selects = array();
foreach (wp_get_sites() as $blog)
   // select only the fields you need here!
   $selects[] = "(SELECT comment_post_ID, comment_author, comment_author_email, comment_date_gmt, comment_content, post_title, {$blog[\'blog_id\']} as blog_id FROM {$wpdb->base_prefix}{$blog[\'blog_id\']}_comments
      LEFT JOIN {$wpdb->base_prefix}{$blog[\'blog_id\']}_posts
      ON comment_post_id = id
      WHERE post_status = \'publish\'
        AND post_password = \'\'
        AND comment_approved = \'1\'
        AND comment_type = \'\'
       ORDER BY comment_date_gmt DESC LIMIT {$number})"; // real number is (number * # of blogs)

  $comments = $wpdb->get_results(implode(" UNION ALL ", $selects)." ORDER BY comment_date_gmt DESC", OBJECT);
然后渲染输出:

<ul>
<?php
$count = 0;
foreach((array)$comments as $comment):
  $count++;
  if($count == $number+1) break; 
  ?>
  <li>
   <?php echo get_avatar($comment->comment_author_email, 32); ?>
   <a href="<?php echo get_blog_permalink($comment->blog_id, $comment->comment_post_ID); ?>" title="commented on <?php echo strip_tags($comment->post_title); ?>">
   <?php echo $comment->comment_author; ?> wrote: 
   <?php echo convert_smilies(wp_trim_excerpt($comment->comment_content)); ?>
   (<?php echo human_time_diff(strtotime("{$comment->comment_date_gmt}")); ?>)  
   </a>
  </li>
<?php
endforeach;
?>
</ul>
您还应该缓存结果,并每隔10分钟左右刷新一次缓存。

SO网友:Bainternet

尝试以下操作:

$sqlstr = \'\';
$blog_list = get_blog_list( 0, \'all\' );
$sqlstr = "SELECT 1 as blog_id, comment_date, comment_id, comment_post_id, comment_content, comment_date_gmt, comment_author, comment_author_email from ".$table_prefix ."comments where comment_approved = 1 ";
$uni = \'\';
foreach ($blog_list AS $blog) {
    $uni = \' union \';
    $sqlstr .= $uni . " SELECT ".$blog[\'blog_id\']." as blog_id, comment_date, comment_id, comment_post_id, comment_content, comment_date_gmt, comment_author, comment_author_email   from ".$table_prefix .$blog[\'blog_id\']."_comments where comment_approved = 1 ";                
}
$limit = \'\'; //set your limit
$limit = \' LIMIT 0, \'. (int)$wgt_count;
$sqlstr .= " ORDER BY comment_date_gmt desc " . $limit; 
$comm_list = $wpdb->get_results($sqlstr, ARRAY_A);
你可能想看看diamond multisite widgets pluginwitch已经将其实现为一个小部件和一个短代码。

希望这有帮助。

结束

相关推荐

导入到WordPress MultiSite时禁用HTML过滤

我正在迁移到WordPress多站点实例的许多站点都在帖子中嵌入了视频和iFrame。我宁愿禁用WordPress功能,在导入时去掉嵌入的内容,而不是将每篇文章转换为犹太教式的视频嵌入方式。编辑帖子时禁用剥离是as simple as disabling the kses filter. 不幸的是,我不知道导入帖子需要禁用什么。目前我怀疑wp\\u insert\\u post()方法,但没有缩小过滤器的范围。有什么想法吗?Update: 这是特定于WordPress Multisite的。导入到单个Wo