2010-08-27 5 views
0

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

  1. EventDate = Date de l'événement lisible par l'homme
  2. 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; ?> 

Répondre

1

Vous pouvez faire des choses étonnantes avec le WP_Query() fonction, mais je pense que gruoping ne lui appartient pas. Ce que vous pouvez faire est de vous construire un tableau et de sortir les résultats de ce tableau. Ou vous pouvez simplement enregistrer le mois en cours et la sortie le mois prochain dès qu'il change:

if(!isset($currentMonth) || $currentMonth != date("m", strtotime($eventdate))){ 
    $currentMonth = date("m", strtotime($eventdate)); 
?> 
<li><?php echo date("m", strtotime($eventdate)); ?></li> 
<?php 
} 

Ce imprimera mettre le numéro de mois pour le premier événement ($ surrentMonth n'a pas été défini, encore), puis à nouveau chaque fois qu'un nouveau mois est présent. Mais pour sûr, vous devez changer la sortie (le LI) pour ce que vous voulez qu'il soit.

+0

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

+0

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

+0

Hey, merci beaucoup. Avec un peu de peaufinage, je dois le faire fonctionner. Merci beaucoup!! (voir ci-dessus le code modifié) – Dave

Questions connexes