2010-10-29 12 views
0

Salut, donc j'ai une boucle personnalisée qui est censée montrer les événements à venir seulement, elle ne tient pas compte de l'année, elle affiche les événements du passé en raison du mois et de la date.La boucle personnalisée ne compare pas correctement les metavalues ​​

<ul class="upcoming"> 
<?php // Get today's date in the right format 
$todaysDate = date('m/d/y H:i:s'); 
?> 

<?php query_posts('showposts=2&cat=9&meta_key=Date&meta_compare=>=&meta_value=' . $todaysDate . '&orderby=meta_value&order=ASC'); ?> 

<?php if (have_posts()) : ?> 
<?php while (have_posts()) : ?> 
<?php the_post(); ?> 

<li> 
    <?php 
    $Date = get_post_meta($post->ID, 'Date', true); 
    ?> 

     <?php if ($Date) : ?> 
     <div class="date"><span class="month"> <?php echo date('M',strtotime($Date));?> </span> 
      <span class="day"><?php echo date('j',strtotime($Date));?> </span></div> 
     <?php endif; ?> 
     <h4 class="EventTitle"><a href="<?php the_permalink(); ?>" title="Permanent link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h4> 
     <span class="EventType"><?php 
        foreach((get_the_category()) as $childcat) { 
        $category_link = get_category_link( 
              $childcat); 
        if (cat_is_ancestor_of(10, $childcat)) { 
        if (in_category('13')) 
        echo "<a href=\"$category_link\">Workshop</a>"; 
        else echo "<a href=\"$category_link\">$childcat->cat_name</a>"; 
        }} 
        ?> 
     </span> 
      </li> 

<?php endwhile; ?> 
<?php else : ?> 
    <p>Check back soon for new events.</p> 
<?php endif; ?>     
<?php wp_reset_query(); ?> 

Le ouput pour ce module est « Revenez bientôt pour de nouveaux événements », indépendamment du fait qu'il ya des événements futurs disponibles.

J'ai récuré cette chose pendant des heures et je n'arrive pas à trouver pourquoi elle ignore l'année. Des idées?

Répondre

1

Il me semble que vous comparez la date comme une chaîne plutôt que comme une date littérale. Et parce que vous comparez les chaînes et que vous les définissez en mm/jj/aaaa, le mois et la date prennent une plus grande priorité que l'année précédente. Donc 10/21/2014 est inférieur à 10/22/2010.

Vous devrez peut-être reformater votre format post_meta Date pour être en mesure de faire une comparaison de date précise. La meilleure façon serait d'utiliser yyyy-mm-dd hh:mm:ss donc tout est dans l'ordre décroissant de précédence. Alternativement, vous pouvez casser le post_meta Date et comparer l'année puis le mois puis le jour et l'heure dans cet ordre.

+0

Ouais c'était le fait qu'il comparait comme une ficelle donc l'année devait passer en premier. –