私はすでにこの質問をしましwordpress.stackexchange.com
たが、これは単純なPHPの質問であり、ワードプレスとは何の関係もないかもしれないと彼らは私に言いました。
自分が書いた関数にかなり大きな問題があります…</p>
この関数は、「イベント」のすべてposts
を一覧表示します。custom-post-type
function get_event_list( $latest = true, $order = 'ASC' ) {
echo '<ul class="event-items">';
$yesterday = time() - 24*60*60;
$compare = $latest ? '>' : '<';
$current_year = '';
$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();
global $post;
$this_year = get_post_meta( $post->ID, 'event_date', true );
$this_year = date('Y', $this_year);
if ( !$latest && ( $this_year != $current_year ) ) :
// new year, output the year header
// and reset current year to this new value
echo '<li class="wrapper year"><h2>' . $this_year . '</h2></li>';
$current_year = $this_year;
endif;
get_template_part( 'inc/event', 'item' ); // creates the actual li-item
endwhile;
wp_reset_postdata();
echo '</ul>';
}
ご覧のとおり、「イベントの日付」を現在の年と比較しているので、リストを異なる年に分割できます。私が抱えている問題は、これはループget_post_meta( $post->ID, 'event_date', true );
内でのみ利用可能であるということです。while
現在、上記の関数はこれを出力します…</ p>
<ul class="event-items">
<li class="year">2012</li>
<li>Event 05</li>
<li>Event 04</li>
<li>Event 03</li>
<li>Event 02</li>
<li>Event 01</li>
<li class="year">2011</li>
<li>Event 03</li>
<li>Event 02</li>
<li>Event 01</li>
<li class="year">2010</li>
<li>Event 04</li>
<li>Event 03</li>
<li>Event 02</li>
<li>Event 01</li>
</ul>
ただし、この構造は使用がかなり複雑であり、意味的には実際には正しくなく、有用ではありません。
毎年新しいものにまとめたいと思い<ul>
ます。
そうする方法はありますか?「post_meta
event_date」はループ内でのみ使用できます。「event_date」を現在の年と比較して、クエリされた結果を新しいものにラップするにはどうすればよいですか。ul
そのように…</p>
<ul class="event-items">
<li class="year"><div>2012</div>
<ul>
<li>Event 05</li>
<li>Event 04</li>
<li>Event 03</li>
<li>Event 02</li>
<li>Event 01</li>
</ul>
</li>
…
</ul>
たぶん、これに対する良い論理的な解決策を知っている人がいるでしょう。get_posts()
代わりに使用する必要があるかもしれませnew WP_Query
んが、PHPはそれほど得意ではなく、これをどのように処理できるかわかりません。
誰かアイデアがあれば教えてください!前もって感謝します!