私はWPマルチサイトインストールから最新のコメントを引き出すことができるカスタムSQLクエリを探しています。
最終結果は、通常の最近のコメントウィジェットと同じになりますが、インストール内のすべてのサイトからのものです。
アイデア?
ありがとう
OK、私はこれにも興味があるので בנייתאתרים のソリューションに基づいていくつかの研究をしました。
まず、ブログIDのリストを取得する必要があります。get_blog_list()
は、 " suicidal database query " :)と思われるため推奨されません。とにかく、WP 3.2 wp_get_sites() と呼ばれます。そのため、代わりに 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分ごとに1回程度キャッシュをフラッシュする必要があります。
これを試して:
$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);
そして、あなたは ダイヤモンドマルチサイトウィジェットプラグイン を見てみたいと思うかもしれません。
これが役立つことを願っています。