2016-09-08 2 views
2

사용자 정의 WP_Query를 사용하려하지만 결과가 올바르지 않습니다.사용자 정의 WP_Query가 의도 한대로 작동하지 않습니다.

반경 검색을 사용하여 "WP 작업 관리자"로 등록 된 작업을 필터링하는 사용자 지정 양식을 만들고 싶습니다.

$args = array(
'post_type' => 'job_listing', 
'post_status' => array('publish'), 
    'meta_query' => array(
     'relation' => 'AND', 
      array(
       'key' => 'geolocation_long', 
       'value' => array($maxLong,$minLong), 
       'compare' => 'between', 
       'type'  => 'numeric', 
      ), 
      array(
       'key'  => 'geolocation_lat', 
       'value' => array($maxLat,$minLat), 
       'compare' => 'between', 
       'type'  => 'numeric', 
      ), 
     ), 
    ); 

$the_query = new WP_Query($args); 

는 당신이 어떤 문제를 발견 할 수 :

이 내 쿼리입니다?

도움을 주시면 감사하겠습니다. 고맙습니다!

+1

어떤 오류를받을 수 있나요? 그러면 문제 해결에 도움이 될 것입니다. – nyedidikeke

+0

나는 @nyedidikeke가 말한 것에 동의 할뿐 아니라 $ maxLong, $ minLong의 var_dump를 제공하는 것에 동의한다. 변수 유형 문제 일 수 있습니다. 또한 설명서에는 "BETWEEN"과 "NUMERIC"을 모두 대문자로 비교하도록 명시되어 있습니다.하지만 실제로 문제가 있는지 전혀 알지 못합니다. :) –

+0

시간 내 주셔서 감사합니다. 글쎄, 나는 어떤 에러도 발생시키지 않는다. 데이터베이스에 체크했는데 5 개의 결과를 주어야한다. @ GregBurkett 나는 그것을 시도했지만 어느 쪽도 일하지 않고있다. $ maxLong, $ minLong 등은 51.509865 및 -0과 같은 좌표입니다.118092 –

답변

0

이것은 BETWEEN 비교 기능의 문제점 일 수 있습니다. 생성되는 정확한 쿼리를 살펴보고 비교가 실제로 이 아닌 문자열 (예기치 않은 결과가 발생할 수 있음)이 아닌 부동 소수점을 비교하는지 살펴 보시기 바랍니다.

wordpress.stackexchange.com과 매우 비슷한 검색어에 대해 수행 한 문제 해결을 살펴보십시오.

다음은 질문에서 인용 다음 postmeta 값이 문자열로 저장되기 때문에

, 나는 내가 DECIMAL에 캐스팅되어야하지만 그냥 인해로 문자열에서 진수 값을 트림 것으로 보인다 생각 DECIMAL 인수/정밀도 매개 변수가 부족합니다.

Rarst의 답변을 검토 : 당신은 생성 된 SQL을 필터링하고 당신이 필요로하는 정밀 매개 변수를 추가 할 수 있습니다

합니다.

'suppress_filters' => false, 

그리고 :

add_filter('get_meta_sql','cast_decimal_precision'); 

function cast_decimal_precision($array) { 

    $array['where'] = str_replace('DECIMAL','DECIMAL(10,3)',$array['where']); 

    return $array; 
} 
도하지만이 제안에

공지 사항 영업 이익의 코멘트 :

시도를 모두 해결하고

조회하려면 다음을 추가하여 get_posts()에 대한 필터를 사용 작은 따옴표 (wp 3.1.1)로 문자열을 비교하는 것처럼 보입니다. 원시 SQL을 시도했지만 작동하지 않았다.

우리가 당신을 도울 수 있도록 추가 조사 결과를 업데이트하십시오.

+1

답변 해 주셔서 감사합니다! 죄송합니다. 내가이 문제를 찾을 때 그 질문을 보지 못했습니다! 어쨌든 필터를 활성화하고 10 진수 정밀도를 캐스팅하는 필터를 삽입하면 내 문제가 해결되었습니다! 많은 당신에게 고마워! –

+0

@ PedroPinto 아무 문제 없어, 도와 드리겠습니다! 이 대답을 수락 해 주셔서 감사합니다 :). –

0

변경 $의 minlong 및 $ MAXLONG

$args = array(
'post_type' => 'job_listing', 
'post_status' => array('publish'), 
    'meta_query' => array(
     'relation' => 'AND', 
      array(
       'key' => 'geolocation_long', 
       'value' => array($minLong,$maxLong), 
       'compare' => 'between', 
       'type'  => 'numeric', 
      ), 
      array(
       'key'  => 'geolocation_lat', 
       'value' => array($minLat,$maxLat), 
       'compare' => 'between', 
       'type'  => 'numeric', 
      ), 
     ), 
    ); 

$the_query = new WP_Query($args); 
+0

시간 내 주셔서 감사합니다. 트릭을하지는 않았지만 옳았습니다! 나는 그 값을 바꿀 필요가 있었다, 그들은 틀린 순서에 있었다! 고맙습니다 –

관련 문제