サポート » 使い方全般 » カテゴリ別の最新の投稿を1件ずつ表示し、日付順に表示したい

  • 全カテゴリの最新の投稿を1件ずつ表示させ、かつ日付が新しいものから順に表示されるようにしたいのですが、行き詰っています。

    例として、下記のような動きにしたいと思っているのですが、

    (A,B,C,Dはカテゴリ)
    Aさんの新着投稿2009/01/01
    Bさんの新着投稿2009/01/01
    Cさんの新着投稿2009/01/01
    Dさんの新着投稿2009/01/01

    だった時、Cさんが更新した場合、

    Cさんの新着投稿2009/01/08
    Aさんの新着投稿2009/01/01
    Bさんの新着投稿2009/01/01
    Dさんの新着投稿2009/01/01

    と、ソート順が変わるようにしたいのですが、

    Aさんの新着投稿2009/01/01
    Bさんの新着投稿2009/01/01
    Cさんの新着投稿2009/01/08
    Dさんの新着投稿2009/01/01

    と、カテゴリID順にソートされ、新着順に表示する方法がわかりません。
    現在のコードは下記のとおりです。

    <?php
    $categories = get_categories(‘hide_empty=1’);
    foreach ($categories as $category) :
    query_posts(‘showposts=1&cat=’.$category->cat_ID);
    if (have_posts()) : the_post();
    ?>
    <?php the_title(); ?>
    <?php the_time(‘Y/m/d H:i:s’); ?>
    <?php endif; endforeach; ?>

    上記のコードの場合、「全カテゴリの最新の投稿を1件ずつ表示」はできているのですが、カテゴリーID順にソートされてしまい、新着順になりません。

    どなたか、方法をご教授いただけませんでしょうか。
    未熟者で申し訳ございませんが何卒お願い申し上げます。

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

    (@jim912)

    hkrizmさん、こんにちは。

    get_categoriesは、カテゴリーの更新順では取得できませんし、取得したデータにも更新日に該当するものがありませんので、カテゴリーと最新の投稿を全て取得した後に、並び替えを行うしかなさそうです。
    query_postsを使わずにget_postsを使って、投稿リストを取得、1つの配列にまとめて、更新日順にソート、出力といった流れになるかと思います。

    後半のほうのprint文などは、あくまでも例えばの話ですが、まぁ、以下のようにやっていくんでしょうかね。

    <?php
    $categories = get_categories('hide_empty=1');
    foreach ($categories as $category) :
    $buf[] = get_posts('numberposts=1&showposts=1&category='.$category->cat_ID);
    endforeach; 
    
    foreach($buf as $key => $row){
        $postdate[$key] = $row["post_date"];
    }
    array_multisort($postdate,SORT_DESC,$buf);
    
    foreach($buf as $row){
        print "<h2>". $row[0]->post_title. "</h2>投稿日:". $row[0]->post_date;
    	print "<br />";
    	print $row[0]->post_content;
    	print "<br /><br />";
    }
    
    ?>
2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「カテゴリ別の最新の投稿を1件ずつ表示し、日付順に表示したい」には新たに返信することはできません。