wp_query有多个自定义字段,返回0结果

时间:2014-12-26 16:30:20

标签: php mysql wordpress custom-post-type

在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项

  • meta_key ys_product_status =&#39; ok&#39;
  • meta_key ys_product_start =&#39; 20141101&#39;
  • meta_key ys_product_end =&#39; 20141230&#39;

第2项

  • meta_key ys_product_status =&#39; ok&#39;
  • meta_key ys_product_start =&#39; 20141101&#39;
  • meta_key ys_product_end =&#39; 20150131&#39;

今天的结果(&#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内容: item 1 item 2

我做错了什么?

1 个答案:

答案 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'