Support » Fixing WordPress » meta key Not Equal to

  • Trying to load my query and I want it to NOT pull a certain meta value. Trying to also pull dates from the previous week, not sure if that is possible. Here’s what I’ve got, any direction would be appreciated.

       'category__in' => $cat,
       'showposts' => 3,
       /* meta_key NOT 'pixel_video', meta_value NOT 'yes' */
       /* show posts from THIS week only */
       'caller_get_posts' => $do_not_show_stickies
Viewing 8 replies - 1 through 8 (of 8 total)
  • esmi


    Forum Moderator

    Do you know if it needs to be query_posts() for it to work? I’m running the following using WP_Query().

    This one works:
    $weekly_article = new WP_Query("category_name=pixelosophy&showposts=$showposts&caller_get_posts=1");

    But as soon as I try and tell it to not pull ones with a certain meta value, it fails:
    $weekly_article = new WP_Query("category_name=pixelosophy&showposts=$showposts&caller_get_posts=1&meta_key=pixel_video&meta_compare=!=&meta_value=yes");

    SQL does not use ‘!=’ for not equal, it uses ‘<>’.

    Maybe this will help you – this is the SQL that generates:

    FROM wp_posts
    INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
    INNER JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id)
    JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
    WHERE 1=1
    AND wp_term_taxonomy.taxonomy = 'category'
    AND wp_term_taxonomy.term_id IN ('0')
    AND wp_posts.post_type = 'post'
    AND (wp_posts.post_status = 'publish'
    OR wp_posts.post_status = 'private')
    AND wp_postmeta.meta_key = 'pixel_video'
    AND wp_postmeta.meta_value != 'yes'
    GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 5

    Find out the ID for your philosophy category and use cat=x (where x is that ID) in place of category_name=pixelosophy [edit]

    vtxyzzy – if that is true, that would make line 2139 (at 2.9.1) in query.php wrong
    if ( ! isset($q['meta_compare']) || empty($q['meta_compare']) || ! in_array($q['meta_compare'], array('=', '!=', '>', '>=', '<', '<=')) )

    Sorry about that, I typed it wrong when I was testing.

    I was using the category number in it’s place before. Found out I could just put the name in though since category_name=pixelosophy works too. It’s just the meta_key=pixel_video&meta_compare=!=&meta_value=yes part that’s not working. Which, I copied directly from:

    They’ve got an example on there for a meta value that does not equal blue, and that’s how they have it written. Are you saying it needs to be the category number for it to work?

    Well assuming that the category pixelosophy is ID 43, what I was saying was that if I used category_name the ‘generated’ SQL statement used a wp_term_taxonomy.term_id IN ('0') but if I used a category ID it used wp_term_taxonomy.term_id IN ('43')

    Not really testing against any data, just looking at the query.

Viewing 8 replies - 1 through 8 (of 8 total)
  • The topic ‘meta key Not Equal to’ is closed to new replies.