サポート » 使い方全般 » author id から 投稿の情報を取得したい

  • 投稿からauthor情報取得は出来ますが
    その逆でauthor id から 投稿の情報を取得することは可能でしょうか
    そのauthorの最新の投稿情報だけでかまいません
    今は下記で書いてますが表示が非常に遅く、なんとか速く表示したいです

    $users = get_users();
    foreach ($users as $user) {
    query_posts('&cat=1&posts_per_page=1&author={$user->ID}');
    if (have_posts()) :while (have_posts()) : the_post();
    echo "<a href="?author={$user->ID}">{get_the_title()}</a>";
    endwhile;endif;
    }

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • コードを見る限りの判断ですが、「ユーザーの最新記事を取ってくる」処理が「ユーザーの数だけ」繰り返されるので、かなり遅いでしょうね。

    表示を速くしたいのであれば、

    ■ 記事公開時に、「最新の記事のタイトル」をユーザー情報のどこかに保存する (ユーザーを取得するときに「最新の記事のタイトル」を一緒に取得できるようにする)

    ■ 取得結果をキャッシュしておき、キャッシュを参照する

    のいずれか、あるいは両方をしてみてはいかがでしょうか。

    各ユーザーの投稿を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件が取得できないでしょうか。

    トピック投稿者 centos64

    (@centos64)

    Fumito MIZUNO 様
    現在quickcacheを使用しておりますが
    見るタイミングではキャッシュされておらず遅くなってしまってる状態です

    gogoweb 様
    ありがとうございます、バッチリです。
    よろしければ後少しお願いできませんか
    上記のものにblogidとか、author metaなどを含めることは可能でしょうか

    トピック投稿者 centos64

    (@centos64)

    すみません

    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はマルチサイトを使ったことがほとんどないのでよくわかりません。

    トピック投稿者 centos64

    (@centos64)

    すみません
    なぜか真っ白になって表示されません

    ちょっと書き方間違ってますね

    $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)");

    トピック投稿者 centos64

    (@centos64)

    ばっちり表示されました
    ありがとうございます

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「author id から 投稿の情報を取得したい」には新たに返信することはできません。