コードを見る限りの判断ですが、「ユーザーの最新記事を取ってくる」処理が「ユーザーの数だけ」繰り返されるので、かなり遅いでしょうね。
表示を速くしたいのであれば、
■ 記事公開時に、「最新の記事のタイトル」をユーザー情報のどこかに保存する (ユーザーを取得するときに「最新の記事のタイトル」を一緒に取得できるようにする)
■ 取得結果をキャッシュしておき、キャッシュを参照する
のいずれか、あるいは両方をしてみてはいかがでしょうか。
各ユーザーの投稿を1件ずつ取得ならwpdbからpost_authorをGROUP BYでまとめてはどうでしょう?
<?php
global $wpdb;
$posts = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' GROUP BY post_author ORDER BY post_date DESC ");
?>
で各ユーザーの1件が取得できないでしょうか。
Fumito MIZUNO 様
現在quickcacheを使用しておりますが
見るタイミングではキャッシュされておらず遅くなってしまってる状態です
gogoweb 様
ありがとうございます、バッチリです。
よろしければ後少しお願いできませんか
上記のものにblogidとか、author metaなどを含めることは可能でしょうか
すみません
global $wpdb;
$posts = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' GROUP BY post_author ORDER BY post_date DESC ");
投稿者毎の最も古い記事を取得してます
最新の記事取得がしたいですが難しいでしょうか
あれ?
post_dateをDESCで並べているので最新の記事が取得されるはずですがと思ったけど
GROUP BY が優先されてますね。
$wpdb->get_results"SELECT * FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' AND post_date IN (SELECT MAX(post_date) FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' GROUP BY post_author)"
でいけませんかね。(サブクエリ入るので若干遅くなりますが)
user_metaを取得したいなら上記SQLからuser_idを取得してget_user_metaで取得できます。
blogidはマルチサイトを使ったことがほとんどないのでよくわかりません。
ちょっと書き方間違ってますね
$wpdb->get_results("SELECT * FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' AND post_date IN (SELECT MAX(post_date) FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' GROUP BY post_author)");