サポート » 使い方全般 » 投稿記事のループをカスタマイズ

  • 解決済 yosukeishizaka

    (@yosukeishizaka)


    宜しくお願いします。
     
    投稿記事のループをカスタマイズしたいです。
    現在、author 40人ぐらいでブログを書いて楽しんでいます。

    そこで、40人それぞれの最新記事だけを表示したループを
    作ろうと思っているのですが手だてがありません。
     
    なにかプラグインとかあれば教えてください。
    宜しくお願いします。
     

    〜通常〜
    Bさんの記事
    Aさんの記事
    Cさんの記事
    Aさんの記事
    Dさんの記事

    ↓↓↓↓

    〜カスタマズ〜

    Bさんの記事
    Aさんの記事
    Cさんの記事
    Dさんの記事

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • モデレーター IKEDA Yuriko

    (@lilyfan)

    author 系のテンプレートタグを使えば、たぶんプラグインはいりません。そもそも、所望の動作をするプラグインはたぶん存在しないでしょう (プラグインは万能ではありません)。

    やり方としては、各 author ごとの最新記事1件を取ってきて、日付順に並べ直し、新しいものから必要な数だけ残すのが早いでしょうか。
    いや、データベースクエリーを投げた方がシンプルですね。 (先頭10人を取る場合)

    $wpdb->get_results("SELECT ID FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' AND post_date <= NOW() GROUP BY post_author ORDER BY post_date DESC LIMIT 10");

    # GROUP BY post_author がポイント

    あとは、得られた投稿 ID に対して query_posts() してループを回せばいいでしょう。

    トピック投稿者 yosukeishizaka

    (@yosukeishizaka)

    lilyfan さん有り難うございます。
    phpを全然解ってないですが、頂いた答えを基に勉強してひも解いててみます。

    出来上がったら報告致します!
    有り難うございましたm(_ _)m

    トピック投稿者 yosukeishizaka

    (@yosukeishizaka)

    すみません。無知なりにデータベースクエリーを
    調べてみたのですが、調べる手だてさえわかりませんでした。

    よかったらまた教えて下さいm(_ _)m
     
     
    ■ 通常のタイトルだけ取得

    <?php require(‘./blog/wp-blog-header.php’); ?>
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    <?php the_title(); ?>
    <?php endwhile; else: ?>
    <?php_e(‘sorry, no posts matched your criteria.’); ?>
    <?php endif; ?>
     
     
    これに $wpdb->get_results や query_posts() など
    どこに挿入すればいいのですか?

    ほんと初心者ですみませんっ。

    モデレーター IKEDA Yuriko

    (@lilyfan)

    wp-blog-header.php を require するということは、WordPress の固定ページやテンプレートで実現するのではなく、独立した php ファイルを作るということですね。

    こうするよりは、固定ページを作って、それに専用のページテンプレートを割り当てた方がスムーズです。で、そのテンプレートに以下のようなコードを入れれば OK です。$posts のデータ構造によっては、そのまま foreach できないかもしれません (print_r($posts) してデータ構造を見てみてください)。

    $posts = $wpdb->get_results(..., ARRAY_N);
      foreach ($posts ad $id) {
      query_posts("p=$id");
      if (have_posts()) {
        the_post();
        the_title();
      }
    }

    query_posts は、投稿 ID を入れる場合は1つしか見てくれないようで、ループの中で毎回呼ばないと動きません。

    トピック投稿者 yosukeishizaka

    (@yosukeishizaka)

    lilyfan さん、またお返事本当に有り難うございます!
     
    ちょっと知識がなさ過ぎてよくわかってません。
    勉強してやってみたいと思います!
     
    有り難うございました。

    トピック投稿者 yosukeishizaka

    (@yosukeishizaka)

    MySQLを勉強して解決できました!
     
    # GROUP BY post_author に対して、post_author 以外が SELECT できないこと(私が要求していることが出来ない)が解りました。なので 副問い合わせ? でトライしてみましたが、サーバーのMySQL のバージョンが3だったので、一度別のテーブル(table_b)に書き出し、それをJOINしました。

    DELETE FROM table_b
    INSERT table_b
    		SELECT post_author,MAX(post_date) AS post_date
    		FROM $wpdb->posts
    		WHERE post_status = 'publish' AND post_date <= NOW()
    		GROUP BY post_author
    		ORDER BY post_date DESC
    		LIMIT 10
    SELECT *
    		FROM $wpdb->posts
    		INNER JOIN table_b
    		ON $wpdb->posts.post_date = table_b.post_date
    		ORDER BY $wpdb->posts.post_date DESC

    こんな流れで目的を達成しました。
    あってますでしょうか・・・。
     
    lilyfan さん、本当に有り難うございます!
    一つ一つひも解けて勉強になりました。
    ゼロの状態から質問してしまってすみませんでした。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「投稿記事のループをカスタマイズ」には新たに返信することはできません。