2017-09-20 1 views
0

분류가 여러 개인 옵션이있는 검색 양식이 있습니다. 모든 옵션을 선택하거나 하나만 선택하고 검색을 클릭하면 레코드가 반환되지 않습니다. 나는 관계를 이해하는데 문제가 있으며, 배열을 적절하게 설정하는 방법도 있습니다.Wordpress meta_query OR/AND 관계가 작동하지 않습니다.

$args = array('post_type' => array('property'), 
    'order'    => 'DESC', 
    'orderby'   => 'post_date', 
    'meta_query' => array(
     'relation' => 'AND', 
     array(
      array(
       'key'  => 'property_address_postal_code', 
       'value'  => $search, 
       'compare' => 'LIKE', 
      ), 
      array(
       'key'  => 'property_address_state', 
       'value'  => $search, 
       'compare' => 'LIKE', 
      ), 
      array(
       'key'  => 'property_location', 
       'value'  => $search, 
       'compare' => 'LIKE', 
      ), 
     ), 
     array(
      'relation' => 'OR', 
      array(
       'relation' => 'AND', 
       array(
        'key'  => 'property_price', 
        'value'  => array($_GET['min-price'],$_GET['max-price']), 
        'type' => 'numeric', 
        'compare' => 'BETWEEN', 
       ), 
      ), 
      array(
       'relation' => 'AND', 
       array(
        'key'  => 'property_price', 
        'value'  => array($_GET['min-price'],$_GET['max-price']), 
        'type' => 'numeric', 
        'compare' => 'BETWEEN', 
       ), 
      ), 
     ) 
    ) 
); 

답변

1

먼저이 기능에서 관계 속성이 적용되는 방식을 잘 이해하고 있는지 잘 모르겠습니다. 동일한 레벨의 다른 속성에 AND/OR을 적용합니다. 따라서 처음에는 relation => AND$search 변수가 지정한 속성 중 하나와 일치하고 property_price이 최소값과 최대 값 사이에 있음을 확인하십시오.

둘째, 다음, 중첩 된 메타 쿼리 기본 관계는 AND, 그래서 당신은 다른 속성에 대한 $search 일치 할 때, 당신은 실제로 $search가 지정한 모든 속성을 일치하는지 확인하기 위해 노력하고 있습니다. $search을 하나의 속성 또는 다른 속성과 비교하여 해결할 수 있습니다.

셋째, 가격을 최소 및 최대 가격과 비교하면 메타 쿼리의 형식이 잘못되어 두 메타 쿼리가 동일합니다. 이 경우 하나의 값만 확인하면되므로 관계가 필요하지 않습니다.

당신과 같은 코드를 단순화 할 수 있습니다 :

$args = array('post_type' => array('property'), 
    'order'    => 'DESC', 
    'orderby'   => 'post_date', 
    'meta_query' => array(
     'relation' => 'AND', 
     array(
      'relation' => 'OR', 
      array(
       'key'  => 'property_address_postal_code', 
       'value'  => $search, 
       'compare' => 'LIKE', 
      ), 
      array(
       'key'  => 'property_address_state', 
       'value'  => $search, 
       'compare' => 'LIKE', 
      ), 
      array(
       'key'  => 'property_location', 
       'value'  => $search, 
       'compare' => 'LIKE', 
      ), 
     ), 
     array(
      'key'  => 'property_price', 
      'value'  => array($_GET['min-price'],$_GET['max-price']), 
      'type'  => 'numeric', 
      'compare' => 'BETWEEN', 
     ) 
    ) 
); 

을 지금, 당신은 $searchproperty_address_potal_code처럼 또는 property_address_state처럼 또는 같은 property_locationproperty_price이 최소 및 최대 가격 사이 인 경우 확인하는 쿼리를 만들고있어.

코드의 다른 논리에 따라 약간의 문제가있을 수 있지만 올바른 방향으로 진행해야한다고 생각합니다.

+0

고마워요, 개봉 된 내 스타. 모든 것은 정확히 당신이 말한 것처럼, 나는 SQL 쿼리의 관계를 이해하지만, Wordpress meta_query에서는 그렇지 않습니다. 다시 한 번 솔루션에 대해 감사드립니다. –

+0

필자는 PHP 릴레이션 (implode())과 유사하게, 특정 릴레이션을 구분자로 사용하여 각 릴레이션을 결합하는 '릴레이션 (relation)'이라는 점에서 PHP 쿼리와 유사하게 생각합니다. 나는 그것이 당신이 조금 더 나은 기능을 이해하는 데 도움이되기를 바랍니다. – mcon

관련 문제