Dans mon site WP j'ai une catégorie appelée « événements » où je publie des informations d'événement à l'aide de deux champs personnalisés:Wordpress: événements regroupés par mois
- EventDate = Date de l'événement lisible par l'homme
- eventsortdate = YYYY/MM/DD pour lister les événements dans le bon ordre.
Je possède ce morceau de code à partir d'un poste utile ici: http://www.davidrisley.com/events-list-with-wordpress/
<?php
$timecutoff = date("Y-m-d");
$args = array(
'category_name' => 'events',
'orderby' => 'meta_value',
'meta_key' => 'eventsortdate',
'meta_compare' => '>=',
'meta_value' => $timecutoff,
'order' => 'DESC'
);
$my_query = new WP_Query($args);
if ($my_query->have_posts()) : while ($my_query->have_posts()) :
$my_query->the_post();
$eventdate = get_post_meta($post->ID, "eventdate", true);
?>
<ul id="events">
<li>
<strong><?php echo $eventdate; ?></strong><br />
<a href="<?php the_permalink() ?>"><?php the_title(); ?></a>
</li>
</ul>
<?php endwhile; else: ?>
<ul id="events">
<li><?php _e('No Events Scheduled! Stay Tuned.'); ?></li>
</ul>
<?php endif; ?>
Cela permettra d'assurer les événements sont répertoriés dans l'ordre correct. Cependant, je voudrais également regrouper les événements par mois - alors ayez un en-tête de «mois» et regroupez tous les événements qui tombent dans ce mois-ci sous ce titre.
Toutes les idées très appréciées, ou des suggestions alternatives pour y parvenir sont également très appréciées. Merci.
EDIT:
Code modifié prenant en compte le code suggéré:
<?php
$timecutoff = date("Y-m-d");
$args = array(
'category_name' => 'events-press',
'orderby' => 'meta_value',
'meta_key' => 'eventsortdate',
'meta_compare' => '>=',
'meta_value' => $timecutoff,
'order' => 'ASC'
);
$my_query = new WP_Query($args);
if ($my_query->have_posts()) : while ($my_query->have_posts()) :
$my_query->the_post();
$eventdate = get_post_meta($post->ID, "eventdate", true);
?>
<?php if(!isset($currentMonth) || $currentMonth != date("m", strtotime($eventdate))){
$currentMonth = date("m", strtotime($eventdate));
?>
<li><?php echo date("m", strtotime($eventdate)); ?></li>
<?php
}
?>
<ul>
<li>
<h5><?php echo $eventdate; ?></h5>
<h4><?php the_title(); ?></h4>
<?php the_content(); ?>
</li>
</ul>
<?php endwhile; else: ?>
<ul id="events">
<li><?php _e('No Events Scheduled! .'); ?></li>
</ul>
<?php endif; ?>
EDIT: modification supplémentaire qui fonctionne correctement:
<?php
$timecutoff = date("Y-m-d");
$args = array(
'category_name' => 'events-press',
'orderby' => 'meta_value',
'meta_key' => 'eventsortdate',
'meta_compare' => '>=',
'meta_value' => $timecutoff,
'order' => 'ASC'
);
$my_query = new WP_Query($args);
if ($my_query->have_posts()) : while ($my_query->have_posts()) :
$my_query->the_post();
$eventdate = get_post_meta($post->ID, "eventdate", true);
$eventsortdate = get_post_meta($post->ID, "eventsortdate", true);
?>
<?php if(!isset($currentMonth) || $currentMonth != date("m", strtotime($eventsortdate))){
$currentMonth = date("m", strtotime($eventsortdate));
?>
<li><?php echo date("F", strtotime($eventsortdate)); ?></li>
<?php
}
?>
<ul>
<li>
<h5><?php echo $eventdate; ?></h5>
<h4><?php the_title(); ?></h4>
<?php the_content(); ?>
</li>
</ul>
<?php endwhile; else: ?>
<ul id="events">
<li><?php _e('No Events Scheduled! .'); ?></li>
</ul>
<?php endif; ?>
Merci pour cela - tout ce que je reçois est un "01" affiché en haut de la page cependant. J'ai posté mon code révisé ci-dessus, des idées pour lesquelles cela produit ce résultat? – Dave
La date ('m') était juste un exemple. L'utilisation de 'm' produira le numéro du mois, tandis que 'F' affichera le nom du mois. Voir le doc php ici: http://www.php.net/manual/de/function.date.php – 2ndkauboy
Hey, merci beaucoup. Avec un peu de peaufinage, je dois le faire fonctionner. Merci beaucoup!! (voir ci-dessus le code modifié) – Dave