2016-09-08 27 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參數/精度參數。

和審查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; 
} 

通知OP對這個建議太雖然評論:

嘗試這兩種解決方案,它

加入以下查詢啓用get_posts()過濾器看起來它把它們作爲帶有單引號的字符串(wp 3.1.1),對此有什麼想法?嘗試原始的SQL確實工作。

請更新與進一步的調查結果你的問題,讓我們來幫助你。

+1

謝謝你的回答!對不起,我在查找這樣的問題時沒有看到這個問題! 無論如何,啓用過濾器和插入過濾器來鑄造小數精度解決了我的問題!非常感謝你的隊友! –

+0

@PedroPinto沒問題,樂意幫忙!感謝您接受這個答案:)。 –

0

變化$閩龍和$ 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

謝謝你的時間,以及這並沒有做到這一點,但你是對的!我需要改變這些值,他們是在錯誤的順序!謝謝 –