Мне нужно создать аккордеонный список заголовков новостных статей, сгруппированных по годам. Пока что содержание аккордеонных панелей корректно, каждая панель показывает все новостные посты за этот год.
Проблема в том, что я получаю несколько панелей за годы, основываясь на количестве статей за год. Так, например, в 2003 году было три новостных статьи, поэтому я получаю три аккордеонных панели за 2003 год, каждая из которых содержит три соответствующие новостные статьи за этот год. В 2004 году я получил одну аккордеонную панель, потому что в 2004 году была только одна статья. В 2006 году было шесть статей, поэтому я получил шесть панелей с шестью статьями внутри.
Что мне нужно сделать, чтобы получить только одну панель с правильным количеством названий внутри?
Вот мой SQL:
$newsposts = $wpdb->get_results("
SELECT YEAR(wp_posts.post_date) AS post_year, wp_posts.post_title, wp_posts.ID AS post_id
FROM wp_posts LEFT JOIN wp_term_relationships ON
(wp_posts.ID = wp_term_relationships.object_id)
WHERE wp_term_relationships.term_taxonomy_id = 3
AND wp_posts.post_status = 'publish'
ORDER BY post_date
", OBJECT );
Вот моя разметка:
<?php foreach($newsposts as $year) : ?> <?php //print_r($year); ?>
<li class="accordion-item" data-accordion-item>
<a href="#" class="accordion-title"><?php echo $year->post_year; ?></a>
<div class="accordion-content" data-tab-content>
<?php foreach($newsposts as $post) : ?> <?php //print_r($post); ?>
<?php // Continue unless years match
if ( $post->post_year != $year->post_year ) continue; ?>
<a href="<?php the_permalink($post->post_id); ?>"><?php echo $post->post_title; ?></a><br/>
<?php endforeach; //$posts ?>
</div>
</li>
<?php endforeach; //$year ?>
</ul>
Почему-то мне нужно ограничить первый foreach только одним для каждого представленного года. Буду признателен за любую помощь.