I’m having a problem with an events system that I’m developing for a local roller derby leaugue. I have made a custom post type (‘event‘) where a user can add a few different types of events (taxonomy: ‘event-type‘, terms: ‘bout‘, ‘*fresh_meat_day*’ and ‘*public_event*’). A user can also enter a title, description, location and date for which I use a custom field (not the normal post date).
I display the events on a designated events page (events.php) and I want to show the first upcoming event for each category on my landing page. I have no problems with the events page. It shows a nice table displaying each upcoming event ordered by date (ASC). My problem is in the ordering of the events on the landing page.
I’m using this code to display the events on my landing page:
<?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
?>
I get totally no output from this code except when I remove the line where it says
'meta_vale' => $todaysString;
If I remove that line, I get to see 3 upcoming events like it should and it shows the event name, but not in the right order (the event showing isn’t necessarily the first upcoming event, but in stead the first event that I added).
I’m totally stuck on this one and I really need to get the events ordered in the right way. Any help would be greatly appreciated.
Cheers!
As Kaiser has pointed out, the
meta_value => $todaysString
is querying for events where the value for keyevent_date
is equal to todays string. I.e. events happening today.Also, from the fact that you’ve used
strtotime
suggests you are sorting by timestamp – which you would like interpreted (and sorted as) a number rather than string. So rather than ordering bymeta_vaue
, you want to order bymeta_value_num
. Try: