WordPress.org

Ready to get started?Download WordPress

Forums

Get posts that DOESN'T have meta-keys? (9 posts)

  1. theindustry
    Member
    Posted 3 years ago #

    Hi everybody,

    Totally new on the wordpress forums but been using wordpress for a long time.

    I have tried both get_posts & query_posts in order to get all posts that doesn't have a certain meta_key set.
    How would I do this?

  2. MichaelH
    Member
    Posted 3 years ago #

    Not sure what you mean by 'set', but what about:

    $args=array(
      'meta_key' => 'your_custom_field',
      'meta_value' => 'your_custom_value',
      'meta_compare' => '!=",
      'post_type' => 'post',
      'post_status' => 'publish',
      'posts_per_page' => -1,
      'caller_get_posts'=> 1
    );
    $my_query = null;
    $my_query = new WP_Query($args);

    Note: wonder what happened to my first response to this thread?

  3. theindustry
    Member
    Posted 3 years ago #

    Hi Michael,
    Thanks for your answer.

    Unfortunately that code does only fetch posts where the meta_value isn't "your_custom_value", meaning that a post that doesn't have the "your_custom_field" meta_key won't show up.

    Is there any way I can do this?

  4. Mark / t31os
    Moderator
    Posted 3 years ago #

    I think you'd need two queries, one to fetch the post ids of posts with the given key, then a second query to pull posts, excluding the IDs passed in from the first query..

    It won't be an efficient query, but it would work.. (potentially large query if you have hundreds/thousands of records).

    theindustry, how's your PHP / MySQL skills? Considered writing a query to do it? Might work with a series of filters, but what's this code for? Are you writing this code into a plugin/theme or is this more a case of trying to find redundant records?

  5. theindustry
    Member
    Posted 3 years ago #

    Hi Mark,

    Well, I have a fair share of experience in writing my own queries, but really no idea of how the structure looks in WordPress regarding posts&their meta.

    Do you have any tips on where I might start look?

    Thanks

  6. MichaelH
    Member
    Posted 3 years ago #

    Didn't test this but, this queries all posts, and then loops through each post and if the custom field doesn't exist display the post title:

    <?php
    $args=array(
      'post_type' => 'post',
      'post_status' => 'publish',
      'posts_per_page' => -1,
      'caller_get_posts'=> 1
    );
    $my_query = null;
    $my_query = new WP_Query($args);
    if( $my_query->have_posts() ) {
      while ($my_query->have_posts()) : $my_query->the_post();
        $custom = get_post_meta($my_query->post->ID, 'yourcustomfield', true);
        if ( ! $custom ){
        ?>
          <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p>
          <?php
        }
      endwhile;
    }
    wp_reset_query();  // Restore global post data stomped by the_post().
    ?>
  7. son0fhobs
    Member
    Posted 3 years ago #

    Hey, I like that!

    I've been doing million awkward work arounds to achieve the same thing. I might have to switch over. Thanks!

    PS since that's all outside the loop, where would you suggest pasting that code, in the theme functions.php?

    Thanks for your expertise Michael!

  8. MichaelH
    Member
    Posted 3 years ago #

    Depends on where you want to 'see' that displayed. See Template Hierarchy.

  9. Mark / t31os
    Moderator
    Posted 3 years ago #

    @theindustry

    The database schema can be seen here (i personally tend to just look at the structure in phpmyadmin).
    http://codex.wordpress.org/Database_Description

    Building your own queries is really just a matter of getting to know the $wpdb class, you can find info on that here.
    http://codex.wordpress.org/Function_Reference/wpdb_Class

    I quickly wrote something, as an example using $wpdb to query for posts without a given meta key.
    http://wordpress.pastebin.com/kgLt1RrG

    You're welcome to use or the refine that code as much as you like and the commented section at the bottom is again, just another example.

Topic Closed

This topic has been closed to new replies.

About this Topic