it-swarm.com.de

Ordnen und gruppieren Sie Beiträge nach Monat und Jahr

Wie können Beiträge nach Monat und Jahr durch eine separate Überschrift gruppiert werden?

Beispiel (Ausgabe mit diesem Datumsformat):

Dezember 2014
- 4. Dez 2014
- 5. Dez 2014

Ich habe ein benutzerdefiniertes Feld (Datumsauswahl) "event_date".

    <?php

$the_query = new WP_Query( array(
    'post_status' => 'publish',
    'meta_key'    => 'event_date',
    'orderby'     => 'meta_value'
) );

$current_header = '';

while ( $the_query->have_posts() ) :
    $the_query->the_post();

    $temp_date = get_post_meta( get_the_ID(), 'event_date', true );

    if ( $temp_date != $current_header ) {
        $current_header = $temp_date;
        echo "<div class='sub_category_name_wrapper'><h5>$current_header</h5></div>";
    }

    ?>

    <div class="event_content_wrapper">
        <ul>
            <li>        
                <span><?php the_field('event_date'); ?></span>&nbsp;<span><?php the_field('event_region'); ?></span>
                <h4><?php the_title(); ?></h4>
                <br>
                <?php the_excerpt(); ?>
                <a class="content_button" href="<?php the_permalink(); ?>">mehr</a>
            </li>
        </ul>
    </div>

<?php endwhile;

?>
2
tightman

Wenn Sie die Posts mit dem Argument orderby als event_date abfragen (dies kann ein beliebiges Feld mit Datumsformat sein), werden die Posts nach Datum, absteigend oder aufsteigend sortiert. Das einzige, was Sie danach tun müssen, ist, sie nach Jahr und Monat zu gruppieren.

So:

<?php

            $posts = get_posts(array(
                'post_type' => 'post',
                'meta_key'  => 'event_date',
                'orderby'   => 'meta_value_num',
                'order'     => 'DESC'
            ));

            $group_posts = array();

            if( $posts ) {

                foreach( $posts as $post ) {

                    $date = get_field('event_date', $post->ID, false);

                    $date = new DateTime($date);

                    $year = $date->format('Y');
                    $month = $date->format('F');

                    $group_posts[$year][$month][] = array($post, $date);

                }

            }

            foreach ($group_posts as $yearKey => $years) {

                echo $yearKey;
                echo '<br>';

                foreach ($years as $monthKey => $months) {

                    echo $monthKey;
                    echo '<br>';

                    foreach ($months as $postKey => $posts) {

                        echo $posts[1]->format('d-m-Y');
                        echo '<br>';
                        echo $posts[0]->title;
                        echo '<br>';
                    }

                }

            }

        ?>

Sie können das Jahres- und Monatsformat nach Ihren Wünschen ändern. Dies ist nur eine Demonstration. Gleiches gilt für die HTML-Formatierung.

4
Laxmana