I need to list completed (meta_value) projects for each year (meta_value), like this:

- Project 1
- Project 2

- Project 3 ...

I found (here) a great piece of code to deal with I'm after:

<?php // List posts by a Custom Field's values
$meta_key = 'year';  // The meta_key of the Custom Field
$sql = "
   SELECT p.*,m.meta_value
   FROM $wpdb->posts p
   LEFT JOIN $wpdb->postmeta m ON (p.ID = m.post_id)
   WHERE p.post_type = 'post'
      AND p.post_status = 'project'
      AND m.meta_key = '$meta_key'
   ORDER BY m.meta_value, p.post_date DESC
$rows = $wpdb->get_results($sql);
if ($rows) {
   foreach ($rows as $post) {
      if ($post->meta_value != $current_value) {
         echo "<h3>$post->meta_value</h3>";
         $current_value = $post->meta_value;
      // Put code here to display the post

But I still have (1) a further request on the code and (2) a problem with it, which are:

  1. I need to filter the query by another meta_key (key state: value completed).

  2. I use WPML and the post list displays both the post and it's translation (it should only get the current language posts)


You should use some of WordPress's built in functions, there is even a new meta compare parameter. You can create, for example:

$state =  get_post_meta($post->ID, 'meta_state', true);  //the meta value to compare
$query = new WP_Query
              ( array( 
               'meta_key' => 'project', 
               'meta_value' => '$state', 
               'meta_compare' => '<=', 
               'post_type' => 'projects' ) );

//spit them out into yearly dates using a conditional tag
  • Can you elaborate a little on how the conditional spitting would go? Thank you. – AnaRita Apr 19 '11 at 16:29
  • Well this grabs all your posts with meta key project for instance, then you can write some php for the output, something like -->if the_date= 2006 ...echo"something"; – Wyck Apr 19 '11 at 22:24
  • I ended up making a query with meta_query and repeated it for each year. I'm still hoping, 'though, for a dynamic solution. – AnaRita Apr 20 '11 at 2:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.