J'ai un problème avec un système d’événements que je développe pour une leaugue locale. J'ai créé un type de message personnalisé (' événement ') dans lequel un utilisateur peut ajouter quelques types d'événements différents (taxonomie: ' type d'événement ', termes:' bout ',' * fresh_meat_day * 'et' * évennement publique*'). Un utilisateur peut également entrer un titre, une description, un lieu et une date pour lesquelles j'utilise un champ personnalisé (et non la date de publication normale).
J'affiche les événements sur une page d'événements spécifiée (events.php) et je souhaite afficher le premier événement à venir pour chaque catégorie sur ma page de destination. Je n'ai aucun problème avec la page des événements. Il montre une belle table affichant chaque événement à venir ordonné par date (ASC). Mon problème est dans la commande des événements sur la page de destination.
J'utilise ce code pour afficher les événements sur ma page de destination:
<?php
$post_type = 'event';
$tax = 'event-type';
$todaysDate = date('d.M.y');
$todaysString = strtotime($todaysDate);
$tax_terms = get_terms($tax, array('orderby' => 'id', 'order' => 'ASC'));
if ($tax_terms) {
foreach ($tax_terms as $tax_term) {
$args = array(
'post_type' => $post_type,
"$tax" => $tax_term->slug,
'post_status' => 'publish',
'posts_per_page' => 1,
'meta_key' => 'event_date',
'meta_compare' => '=',
'meta_value' => $todaysString,
'orderby' => 'meta_value',
'order' => 'ASC',
'caller_get_posts' => 1
); // END $args
$my_query = null;
$my_query = new WP_Query($args);
if ($my_query->have_posts()) { ;?>
<ul>
<?php while ($my_query->have_posts()) : $my_query->the_post();
?>
<li>
<div class="togglebox_140">
<img src="<?php bloginfo("template_directory"); ?>/images/events_freshmeat.png" />
<div class="togglebox_140_content">
<div class="togglebox_140_background"> </div>
<div class="togglebox_text">
<?php echo '<p class="togglebox_caption">Next '.$tax_term->name.'</p>';?>
<p class="togglebox_text_type"><?php the_title(); ?></p>
</div>
</div>
</div>
</li>
<?php
endwhile;
} // END if have_posts loop?>
</ul>
<?php wp_reset_query();
} // END foreach $tax_terms
} // END if $tax_terms
?>
Je ne reçois aucune sortie de ce code, sauf quand je supprime la ligne où il est écrit
'meta_vale' => $todaysString;
Si je supprime cette ligne, je vois 3 événements à venir comme il se doit et le nom de l'événement est affiché, mais pas dans le bon ordre (l'événement affiché n'est pas nécessairement le premier événement à venir, mais plutôt le premier événement ajoutée).
Je suis totalement bloqué sur celui-ci et j'ai vraiment besoin que les événements soient commandés de la bonne manière. Toute aide serait grandement appréciée.
À votre santé!
Comme l'a souligné Kaiser, le meta_value => $todaysString
interroge les événements pour lesquels la valeur de la clé event_date
est égale à todays string. C'est à dire. événements qui se passent aujourd'hui.
De plus, du fait que vous avez utilisé strtotime
suggère que vous triez par horodatage - que vous souhaitez interpréter (et trié) comme un nombre chaîne. Donc, plutôt que de commander par meta_vaue
, vous voulez commander par meta_value_num
. Essayer:
$args = array(
'post_type' => $post_type,
"$tax" => $tax_term->slug,
'post_status' => 'publish',
'posts_per_page' => 1,
'meta_key' => 'event_date',
'orderby' => 'meta_value_num',
'order' => 'ASC',
); // END $args