具有2个元查询的WordPress自定义查询

时间:2017-08-14 07:35:50

标签: php wordpress

我有一个二手车网站。在查看特定车辆时,存在用于类似车辆的部分。目前,类似的车辆基于具有相同车身风格的车辆($ vehicletype)。

我想改变它以同样的价格展示相同车身风格的车辆。到目前为止,我已经使用了这段代码:

$vehicletype = get_post_meta($post->ID, 'Vehicle Type', true);
$id = get_the_ID();
$baseprice = get_post_meta($post->ID, 'Retail Price', true);
$minprice = $baseprice - 10000;
$maxprice = $baseprice + 10000;

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
  'post_type' => array('vehicle'),
  'post__not_in' => array($id),
  'post_status' => 'publish',
  'order' => 'DESC',
  'orderby' => 'date',
  'posts_per_page' => 5,
  'paged' => $paged,
  'meta_key' => 'Vehicle Type',
  'meta_value' => $vehicletype,
  'meta_key' => 'Retail Price',
  'meta_value' => $baseprice,
);

这显然显示了具有相同体型和完全相同价格的车辆。我想改变它,以便它不仅显示相同价格的车辆,而且显示类似价格范围内的车辆(在$ minprice和$ maxprice之间)。

我怀疑它看起来像这样:

'meta_query' => array(
  array(
    'key'     => 'Retail Price',
    'value'   => array( $minprice, $maxprice ),
    'type'    => 'numeric',
    'compare' => 'BETWEEN',
  ),
),

我已经尝试了几种不同的方法来实现这一点,但是所有这些方法都导致了一个"这个页面不起作用"错误页面。

任何帮助都将不胜感激。

提前致谢
威廉

2 个答案:

答案 0 :(得分:1)

试试这个

$vehicletype = get_post_meta($post->ID, 'Vehicle Type', true);
$id = get_the_ID();
$baseprice = get_post_meta($post->ID, 'Retail Price', true);
$minprice = $baseprice - 10000;
$maxprice = $baseprice + 10000;
$query = array();
$queryPrice = array();
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
if( "" != $vehicletype )
    $query[] = ['key'=>'Vehicle Type','value' => $vehicletype, 'compare' => '='];

if( "" != $baseprice ){
    $queryPrice[] = ['key'=>'Retail Price','value' => $minprice, 'compare' => '>'];
    $queryPrice[] = ['key'=>'Retail Price','value' => $maxprice, 'compare' => '<'];
}

$args = array(
    'post_type' => 'vehicle',
    'post__not_in' => array($id),
      'post_status' => 'publish',
      'order' => 'DESC',
      'orderby' => 'date',
      'posts_per_page' => 5,
      'paged' => $paged,
    'meta_query' => array( 'relation' => 'OR ',$query )
    'meta_query' => array( 'relation' => 'AND ',$queryPrice )
);
$wp_query = new WP_Query($args);

此外,您的查询有

'meta_key' => 'Vehicle Type',
'meta_key' => 'Retail Price',

请确保您提供的密钥是数据库中的内容

答案 1 :(得分:1)

尝试这样的事情是介于两者之间不起作用:

'meta_query' => array(
    'relation' => 'AND',
    array
    (
        'key'     => 'Vehicle Type',
        'value'   =>  $vehicletype, 
        'compare' => '='
    ),
    array
    (
        'key'     => 'Retail Price',
        'value'   =>  $minprice,
        'type'    => 'numeric',
        'compare' => '>=',
    ),
    array
    (
        'key'     => 'Retail Price',
        'value'   =>   $maxprice,
        'type'    => 'numeric',
        'compare' => '<=',
    )
)