質問: マルチサイトネットワークでの最近のコメントの一覧表示 私は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回程度キャッシュをフラッシュする必要があります。