web-dev-qa-db-ja.com

Custom-post-type-archive:投稿は年ごとにソート/フィルタリングされますか?

私は、投稿がwr_event "event_date"でソートされたcustom-post-type meta_keyを持っています。

だから私はこの便利な機能を持っています…

function get_event_list( $latest = true, $order = 'ASC' ) {
    echo '<ul class="event-items">';

    $yesterday = time() - 24*60*60;
    $compare = $latest ? '>' : '<';

    $args = array(
        'post_type' => 'wr_event',
        'posts_per_page' => -1, // show all posts
        'meta_key' => 'event_date',
        'orderby' => 'meta_value_num',
        'order' => $order,
        'meta_value' => $yesterday,
        'meta_compare' => $compare
    );

    $loop = new WP_Query( $args );
    while ( $loop->have_posts() ) : $loop->the_post();
        get_template_part( 'inc/event', 'item' );
    endwhile;
    wp_reset_postdata();
    echo '</ul>';
}

私が単に `all「今後の」イベントと呼んだ場合、それらは昇順のイベント日付順にリストされます。

しかし、私のイベントアーカイブでは、 `が既に起こったすべてのイベントは、降順でソートされているので、`と呼びます。

私の質問:イベントアーカイブの投稿の間に年を入れるにはどうすればいいですか?

今、私はこれを持っています…

- event 04-2012
- event 03-2012
- event 02-2012
- event 01-2012
- event 03-2011
- event 02-2011
- event 02-2011
- event 05-2010
- … and so on

そして私が欲しいのはこれです…

2012
- event 04-2012
- event 03-2012
- event 02-2012
- event 01-2012

2011
- event 03-2011
- event 02-2011
- event 02-2011

2010
- event 05-2012
- … and so on

1年のすべてのイベントの間に年数を挿入するにはどうすればよいですか。それについて巧妙なアイデアはありますか?私は本当にこれを行う方法を見つける必要がありますか?

2
mathiregister

出力している$current_yearを保持するための変数を作成し、それを各イベントの年に対してチェックし、異なる年のイベントが発生したときに値をリセットします。

$current_year = '';
while ( $loop->have_posts() ) : $loop->the_post();

    // this is just a simple example of the logic,
    // you'll need to extract the year from your date key
    $this_year = get_post_meta( $post->ID, 'event_date', true );

    if( $this_year != $current_year ) :
        // new year, output the year header
        // and reset current year to this new value
        echo '<h3>' . $this_year . '</h3>';
        $current_year = $this_year;
    endif;

    echo 'event' . $this_year;

endwhile;
1
Milo