• いくつかのカテゴリで記事を作成しているのですが、
    トップページで各カテゴリ1件目は個別のレイアウトで表示をして、
    2件目以降はカテゴリ関係なく投稿順に同じレイアウトで表示したいと考えております。

    この各カテゴリの2件目以降の記事をミックスした一覧のソースが以下となります。
    「offset=1」が効いていないのですが、原因などおわかりになる方がいらっしゃいましたらお教えいただけないでしょうか?
    よろしくお願い致します。

    <?php
    	$catList = array(1,2,3,4);
    	foreach ($catList as $val) {
      		$id = $val;
    		$resPost = get_posts('numberposts=500&offset=1&category='.$id.'&orderby=post_date');
    			foreach ($resPost as $post) {
    				$resArr []= $post;
    			}
    	}
    	foreach($resArr as $key=>$row){
    		$post_date[$key] = $row->post_date;
    	}
    	array_multisort($resArr,SORT_DESC,$post_date);
    ?>
    <?
    	foreach($resArr as $post):
    	setup_postdata($post);
    ?>
    <?php the_title(); ?>
    <?php endforeach; ?>
3件の返信を表示中 - 1 - 3件目 (全3件中)
  • 間違ってないように見えるのですが、変ですねぇ。

    $args = array(
        'numberposts' => 5, // 500 は漢すぎるので...
        'offset'      => 1,
        'category'    => $id,
        'orderby'     => 'post_date'
    );
    $resPost = get_posts($args);
    print_r($resPost);

    して、get_posts() 直後の $resPost を dump を取るとどうでしょう?

    解決策ではないですが、get_posts() で全部のデータを取って、ループの中で、各カテゴリの最初の投稿だけを別の配列に保存し、残りは上のようにするという手も使えます。変数が1つ余計に必要ですが、データベースアクセスが1回で済むので効率的かもしれません。

    動きそうですが

    <?
    	foreach($resArr as $post):
    	setup_postdata($post);
    ?>

    の部分は

    <?php
    	foreach($resArr as $post):
    	setup_postdata($post);
    ?>

    にしといたほうがいいかと。

    カテゴリーで一軒目をすでに取得しているならそのIDを保存しておいて、get_postsの時点でexcludeでそのIDを省くという手もありますね。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「複数のカテゴリの2番目以降の記事を混ぜた一覧を作成したい」には新たに返信することはできません。