How can I loop only months foreach year?

Question

I have a WordPress archive bar that loops foreach year that have posts, displaying the years and months.

The output should look like this: //year output

2020 //month output
month1
month2
month3
2019
month1
month2
month3
month4

The problem: Its displaying months in every year, I want to limit my loop for mounths that have posts foreach year.

Here is my failed loop:

foreach($months as $month) : $year_current = $month->year;

Here is the whole code:

<ul class="side-list">
                                <!-- year -->
                                <?php
                                    global $wpdb;
                                    $limit = 0;
                                $year_prev = null;
                                $current_post_type = get_post_type();
                                $months = $wpdb->get_results("SELECT DISTINCT MONTH( post_date ) AS month , YEAR( post_date ) AS year, COUNT( id ) as post_count FROM $wpdb->posts WHERE post_status = 'publish' and post_date <= now( ) and post_type = '$current_post_type' GROUP BY month , year ORDER BY post_date DESC");

                                foreach($months as $month) : $year_current = $month->year;
                                    if ($year_current != $year_prev){
                              ?>
                                <li class="side-item">
                                    <h3 class="side-sub-element-ttl js-toggle-menu-02">
                                        <?php
                                                $args = array(
                                                        'post_type' => $current_post_type,
                                                        'date_query' => array(
                                                                'year'  => $month->year

                                                        )
                                                );
                                                $year_query = new WP_Query($args);
                                        ?>
                                        <?php echo $month->year; ?>年
                                    </h3>
                                    <div class="js-toggle-content">
                                        <!-- months -->
                                        <ul class="side-sub-list flex-row">
                                            <?php
                                                foreach($months as $month) : $year_current = $month->year;
                                            ?>
                                            <li class='list-group-item month'>
                                        <a href="<?php bloginfo('url') ?>/<?php echo $month->year; ?>/<?php echo date("m", mktime(0, 0, 0, $month->month, 1, $month->year)) ?>/?post_type=<?php echo $current_post_type ?>">
                                           <span class="archive-month"><?php echo date_i18n("F", mktime(0, 0, 0, $month->month, 1, $month->year)) ?></span>
                                        </a>
                                        </li>
                                            <?php
                                            endforeach;
                                            ?>
                                    </ul>
                                        <!-- end of months -->
                                    </div>
                                </li>
                            <?php } ?>
                            <?php
                            $year_prev = $year_current;
                            endforeach;
                            ?>
                            <!-- end of year -->

                            </ul>
0
Fernando Souza 3 years 2020-04-02T04:52:41-05:00 0 Answers 82 views 0

Leave an answer

Browse
Browse