• 解決済 Kite

    (@ixkaito)


    カスタム投稿(worksとします)のループを作っておりますが、最終的に実現したい形は下記になります。

    ————————————-
    2012
    <2012年のカスタム投稿のループ>

    2011
    <2011年のカスタム投稿のループ>

    2010
    <2010年のカスタム投稿のループ>

    Before 2009
    <2009年以前のカスタム投稿のループ>
    ————————————-

    <div><h1>2012</h1><p>
      <?php query_posts( 'post_type=works&year=2012' ); ?>
       <?php if (have_posts()) : ?>
        <?php while (have_posts()) : the_post(); ?>
          <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> /
        <?php endwhile; ?>
        <?php else : ?>
        <?php endif; ?>
      <?php wp_reset_query(); ?>
     </p></div>

    上記のように、一応query_postsを使って、2012〜2010までは実現できましたが、問題は2つあります。

    1. 2009年以前を処理するシンプルでスマートなやり方はございますでしょうか。
    2. 1ページ内にquery_postsを何度も使っていますが、問題ないのでしょうか。

    以上2点、何卒ご教授いただけますようよろしくお願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • 1.

    global $wpdb;
    $posts = $wpdb->get_results( "
      SELECT *
      FROM $wpdb->posts WHERE YEAR(post_date) <= '2009'
      AND post_type = 'work' AND post_status = 'publish'
    ");
    
    foreach ( $posts as $post ) {
      setup_postdata( $post );
      ?><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a><?php
    }
    wp_reset_postdata();

    2.問題ないですが、get_posts() の方がより無駄が無いです。

    トピック投稿者 Kite

    (@ixkaito)

    kzさん、ご返信ありがとうございます。

    実はkzさんの以前のquery_posts()の期間指定のやり方の投稿を参考に2009年以前を実装しましたが、今回教えていただいたやり方の方がシンプルだと思いますので、こちらも試させていただきます。

    ついでで大変申し訳ございませんが、もしお時間がございましたら、下記についてもお知恵をお借りできれば幸甚です。

    今回は投稿日を2012年までと決めて実装しておりますが、年1回の更新とは言え、また年が増えるとコードが長くなっていきますので、<h1>投稿年</h1>の部分もループに含ませて、投稿があれば自動で出力されるようにするためには、どのようにすれば良いのでしょうか。

    以上、何卒よろしくお願いいたします。

    #未検証

    <?php for ( $year = intval( date( 'Y' ) ); 2009 < $year; $year-- ) : ?>
    <div><h1><?php echo $year; ?></h1><p>
      <?php query_posts( 'post_type=works&year=' . $year ); ?>
       <?php if (have_posts()) : ?>
        <?php while (have_posts()) : the_post(); ?>
          <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> /
        <?php endwhile; ?>
        <?php else : ?>
        <?php ndif; ?>
      <?php wp_reset_query(); ?>
     </p></div>
    <?php endfor; ?>

    トピック投稿者 Kite

    (@ixkaito)

    kzさん、ご教授ありがとうございます。

    どちらも問題なく機能しました。

    このたびはありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)

トピック「カスタム投稿を期間指定して、1ページ内に区切って表示する方法」には新たに返信することはできません。