admin管理员组文章数量:1122832
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?
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?
2 Answers
Reset to default 0If you use a Syntax highlighting editor, you may be able to spot these problems easier.
Change this code:
'category_name' => ",
To this code:
'category_name' => '',
That will fix the syntax error in your code.
You say that it works fine with
$language_sql_param = 'us,gb,ca,au,ie'
but that it breaks with
$language_sql_param = "'de,ch'"
Does it work with $language_sql_param = 'de,ch'
?
Rationale:
'us,gb,ca,au,ie'
!= "'us,gb,ca,ie'"
. In the latter case, you've got extra '
characters in the string you're passing for the $language_sql_param
.
本文标签: wp querySQL returned by WpQuery has wppostsID1
版权声明:本文标题:wp query - SQL returned by Wp_Query has wp_posts.ID = -1 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736284423a1927244.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论