Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

Three people have already tried to solve this, and we're coming up nil. I want to show only posts that have a value in the meta_key 'featured_image'.

So... if 'featured_image' is not empty, show the post. Here's the code:

      <ul>
      <?php
      $args = array(
        'showposts' => 5,
        'meta_query' => array(
          array(
            'key' => 'featured_image',
            'value' => '',
            'compare' => '!='
            )
          )
      );
      $ft_pagination = new WP_Query( $args );
      ?>
      <?php while ($ft_pagination->have_posts()) : $ft_pagination->the_post(); ?>
        <?php $ftimage = get_post_meta(get_the_id(), 'featured_image', TRUE); ?>
        <li>
          <article>
            <a href="">
            <?php if ($ftimage): ?>
              <img src="<?php bloginfo('template_directory'); ?>/timthumb.php?src=<?php echo $ftimage; ?>&w=84&h=60" alt="" />
            <?php else: ?>
              <img src="<?php bloginfo('template_directory'); ?>/timthumb.php?src=/wp-content/themes/ssv/images/review-default.gif&w=84&h=60" alt="" />
            <?php endif; ?>
            </a>
          </article>
        </li>
      <?php
      endwhile;

      wp_reset_query();
      ?>
      </ul>

We have tried literally every combination we can think of, the deprecated meta_* options, query_posts, get_posts, instead of WP_Query... Nothing. Printed the select statement, no meta value field is showing. It exists - for the posts (for every post) and it exists in the db.

We've seen every post out there on the topic right now, including these:

query_posts and only show results if a custom field is not empty

http://scribu.net/wordpress/advanced-metadata-queries.html

Zilch. Please help...

share|improve this question
    
Which version of WordPress are you using? –  MikeSchinkel Mar 2 '11 at 6:09
    
@MikeSchinkel - Sorry Mike, didn't see this — It's 3.1. –  robalan Mar 2 '11 at 6:32

5 Answers 5

up vote 4 down vote accepted

Hi @Rob:

The reason you can't figure out how to do it is because it's not possible, at least not without resorting to SQL. Try adding the following to your theme's functions.php file:

add_filter('posts_where','yoursite_posts_where',10,2);
function yoursite_posts_where($where,$query) {
  global $wpdb;
  $new_where = " TRIM(IFNULL({$wpdb->postmeta}.meta_value,''))<>'' ";
  if (empty($where))
    $where = $new_where;
  else
    $where = "{$where} AND {$new_where}";
  return $where;
}

If you have custom 'featured_image' fields with empty values the above will filter them out. If you problem is something else, we'll have to see what your data looks like to solve it.

One thing I'm curious about; how did you get empty values for 'featured_image'? The admin UI in WordPress 3.1 does its best to keep you from entering empty values. Hope this helps.

share|improve this answer
    
Thank god... so it's not just us. That's good to know, I suppose. Thank you @MikeSchinkel - They really ought to put that in the codex... Looking forward to the explanation. Thanks!! –  robalan Mar 2 '11 at 6:10
    
@Rob - So I was going off my 3.0 knowledge and now I'm testing it in 3.1 and it does seem to work. I have two posts and one with a featured_image custom field and your query works fine. What are you finding? Is there a chance your query is loading posts that do have a featured_image custom field but where the value for that field is empty? –  MikeSchinkel Mar 2 '11 at 6:45
    
@MikeSchinkel - No kidding? Yes, that's exactly what it's doing — every post has the featured_image field, they're just not all set. It's loading up all posts anyway. –  robalan Mar 2 '11 at 7:20
    
@Rob - See my updated answer. –  MikeSchinkel Mar 2 '11 at 7:48
    
@MikeSchinkel - Thank you! It seems to be working perfectly, after setting the post_type in the query also. The empty values are purposeful — not every post has this featured image (and I know about the post thumbnail, it's just not a good option for this site). Thanks so much! –  robalan Mar 2 '11 at 15:14

Am i missing something?

<?php 
    $args = array(
        'post_type' => 'post',
        'posts_per_page' => -1,
        'meta_key' => "featured_image"
    );
    $the_query = new WP_Query( $args ); 

?>

Won't that do it?

share|improve this answer
    
Edit: from the codex: $query = new WP_Query( 'meta_key=featured_image' ); look here:codex.wordpress.org/Class_Reference/… –  Infinity Media Jan 24 at 21:50
    
First, you can always edit a question or answer instead of adding a comment. Second: Don't misuse answers instead of comments. –  kaiser Jan 25 at 0:05
    
If you have a new question, please ask it by clicking the Ask Question button. Include a link to this question if it helps provide context. –  kaiser Jan 25 at 0:05
!has_featured_image();

one liner ftw.

share|improve this answer

This seems to work for getting the value into the query, not sure about whether it pulls valid results though..

'meta_query' => array(
    array(
        'key' => 'some_key',
        'value'   => array(''),
        'compare' => 'NOT IN'
    )
)

Not had time to create fields to test the results, but i've been watching queries i've worked with today and noticed NOT IN will happily take an empty array.

share|improve this answer
    
I know this is an old answer, but for those trying this apparoach, it works with 'compare' => 'NOT LIKE' instead of 'NOT IN' –  handsofaten Jul 11 '12 at 17:10
5  
This worked for me using 'NOT IN', thanks!! –  Anriëtte Myburgh Aug 22 '12 at 14:07

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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