在wordpess 4.1中我有以下WP_Query:
$products = new WP_Query( array(
'post_type' => 'ys_product',
'orderby' => array( 'date' ),
'order' => 'DESC',
'posts_per_page' => 8,
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'ys_product_status',
'value' => 'ok'
),
array (
'key' => 'ys_product_start',
'value' => date('Ymd'),
'compare' => '>='
),
array (
'key' => 'ys_product_end',
'value' => date('Ymd'),
'compare' => '<='
)
)
) );
在我的数据库中,我有两个使用post_type&#39; ys_product&#39;的项目,以及post_meta,如下所示:
第1项
第2项
今天的结果(&#39; Ymd&#39;)今天是&#39; 20141226&#39;,这显然在这些界限之间。
但是,如果我只搜索过滤&#39; ys_product_status&#39; ==&#39; ok&#39 ;;我拿到了两件物品。但是当我添加另外两个元时,它根本不会返回任何结果。
$ products-&gt;请求的内容是:
SELECT SQL_CALC_FOUND_ROWS ysls_posts.ID
FROM ysls_posts
INNER JOIN ysls_postmeta ON ( ysls_posts.ID = ysls_postmeta.post_id )
INNER JOIN ysls_postmeta AS mt1 ON ( ysls_posts.ID = mt1.post_id )
INNER JOIN ysls_postmeta AS mt2 ON ( ysls_posts.ID = mt2.post_id )
WHERE 1=1
AND ysls_posts.post_type = 'ys_product'
AND (ysls_posts.post_status = 'publish' OR ysls_posts.post_status = 'private')
AND (
( ysls_postmeta.meta_key = 'ys_product_status' AND CAST(ysls_postmeta.meta_value AS CHAR) = 'ok' )
AND
( mt1.meta_key = 'ys_product_start' AND CAST(mt1.meta_value AS CHAR) >= '20141226' )
AND
( mt2.meta_key = 'ys_product_end' AND CAST(mt2.meta_value AS CHAR) <= '20141226' )
) GROUP BY ysls_posts.ID LIMIT 0, 8
我定位的两个帖子的post_meta内容:
我做错了什么?
答案 0 :(得分:1)
array (
'key' => 'ys_product_start',
'value' => date('Ymd'),
'compare' => '>='
),
array (
'key' => 'ys_product_end',
'value' => date('Ymd'),
'compare' => '<='
)
这里:ys_product_start&gt; =日期('Ymd')和ys_product_end&lt; = date('Ymd')它的平均值必须符合两个条件,但没有人可以
Row 1 NOT 20141101 >= 20141226 AND 20141230 <= 20141226 // false AND false = false
meta_key ys_product_start = '20141101'
meta_key ys_product_end = '20141230'
Row 2 NOT 20141101 >= 20141226 AND 20150131 <= 20141226 // false AND false = false
meta_key ys_product_start = '20141101'
meta_key ys_product_end = '20150131'