一直在寻找一种使用$wpdb数据库类跨网络生成评论的干净简单的方法。
我确实找到了this answer, 它已经被保护了,已经四年了。
我将它包装在一个函数中,并试图在我的网络首页上调用它,但没有成功。我还使用了mysql语句,但无法让它生成任何输出。
以下是我所拥有的:
function display_sitewide_comments() {
global $wpdb;
$number = 20; // maximum number of comments to display
$selects = array();
$args = array();
foreach (wp_get_sites( $args ) 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);
$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;
}
我想知道,既然这篇文章已经发表了4年了,那么是核心还是数据库结构发生了变化,导致查询过时了?或者可能有一个我看不到的错误。在调试模式下,它不会引发任何错误。我还声明并使用了一个空的$args数组,正如在最初的帖子中所建议的那样。
我认为这是一个非常有用的功能,而且比我更多的人在这方面遇到了麻烦。
谢谢