SQL returned by Wp_Query has wp_posts.ID = -1
I have a custom loop based on these arguments (below), and for some reason when it's run, the SQL returned has this fragment:
... AND wp_posts.ID = -1 ...
And I get no results from the db. If I run the query against the db without this fragment, I get the results I need. Could someone, please, point out what's wrong with argument list that causes this behavior?
$args = array (
'post_status' = 'draft',
'posts_per_page' = 10,
'category_name' = $language_sql_param, //fixed
'meta_query' = array(
array(
'key' = 'review_rating',
'value' = '3',
'compare' = '',
'type' = 'NUMERIC',
),
),
'cache_results' = false,
'update_post_meta_cache' = false,
'update_post_term_cache' = false,
'suppress_filters' = true,
'meta_key' = 'review_id',
'orderby' = 'meta_value_num',
);
$wp_query = new WP_Query( $args );
Revised question:
I am filtering posts based on a category(s) they belong too, in my case they are country codes. Here's the SQL that WP generates when I set $language_sql_param
to this:
$language_sql_param = 'us,gb,ca,au,ie'
It works fine and returns IDs for my posts for EN speaking countries.
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id)
WHERE 1=1
AND ( wp_term_relationships.term_taxonomy_id IN (20,21,28,36,37) )
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'draft')
AND (wp_postmeta.meta_key = 'review_id'
AND (mt1.meta_key = 'review_rating'
AND CAST(mt1.meta_value AS SIGNED) '3') )
GROUP BY wp_posts.ID
ORDER BY wp_postmeta.meta_value+0 DESC
LIMIT 0, 10
When I set $language_sql_param = "'de,ch'"
, I get this SQL:
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id)
WHERE 1=1
AND wp_posts.ID = -1
AND ( wp_term_relationships.term_taxonomy_id IN (27,34) )
AND wp_posts.post_type = 'post'
AND (wp_posts.post_status = 'draft')
AND (wp_postmeta.meta_key = 'review_id'
AND (mt1.meta_key = 'review_rating'
AND CAST(mt1.meta_value AS SIGNED) '3') )
GROUP BY wp_posts.ID
ORDER BY wp_postmeta.meta_value+0 DESC
LIMIT 0, 10
The SQL has this extra AND wp_posts.ID = -1
. WordPress seems to correctly generate the IN clause for the categories I am filtering, as in AND (wp_term_relationships.term_taxonomy_id IN (27,34))
, but because WordPress somehow adds AND wp_posts.ID = -1
condition no posts are returned.
Where is AND wp_posts.ID = -1
coming from?