web-dev-qa-db-fra.com

Commandes et groupements par acf par mois et année

Comment regrouper les publications par mois et par année avec un titre séparé?

Exemple (sortie avec ce format de date):

Dezmber 2014
- 4. déc. 2014
- 5. Dez 2014

J'ai un champ personnalisé (datepicker) "date_événement".

    <?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

Lorsque vous interrogez les publications avec l'argument orderby en tant que event_date (il peut s'agir de tout champ avec un format de date), les publications sont classées par date, desc ou asc. La seule chose que vous devez faire ensuite est de les regrouper par année et par mois.

Alors:

<?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>';
                    }

                }

            }

        ?>

Vous pouvez changer le format d'année et de mois à votre guise. Ceci est juste une démonstration. La même chose s'applique pour le formatage HTML.

4
Laxmana