2014-03-27 60 views
1

我有一個自定義文章類型稱爲「電影」,具有中繼場名爲「下片」,其中有一個字段「start_datetime」 DateTime類型...WordPress的meta_query和排序依據的自定義字段

我想在未來7天內執行查詢以獲取所有具有顯示的電影,並且我想通過顯示的start_datetime對它們進行排序。

我有這個疑問:

$query = new \WP_Query(array(
    'numberposts' => -1, 
    'post_type'  => 'film', 
    'meta_key'  => 'showings_%_start_datetime', 
    'orderby'  => 'meta_value_num', 
    'order'   => 'ASC', 

    'meta_query' => array(
     array(
      'key'  => 'showings_%_start_datetime', 
      'value'  => array(time(), strtotime('+7 days')), 
      'type'  => 'NUMERIC', 
      'compare' => 'BETWEEN' 
     ) 
    ) 
)); 

這抓起,在接下來的7天內正確有一個表現的所有影片,但隨後下令由FIRST顯示的start_datetime的電影,我需要它通過的第一個未來的start_datetime來訂購它們......請幫忙嗎?


實施例:
膜A今天的展示。
電影B有一個明天和另一個顯示1年前。

我的結果將被命令:電影B,然後電影A(因爲實際上電影B是一個顯示開始eralier)。但我需要以相反的順序排列,因爲電影A是第一部未來電影...

回答

2

我通過檢查由WP_Query創建的實際SQL發現了這個問題。我意識到生成的SQL查詢有2個INNER JOIN,一個用於meta_key,另一個用於實際的meta_query

基本上一方面它是過濾那些具有在未來七天showings_%_start_datetime膜,以及在另一方面(獨立地)是訂購通過showings_%_start_datetime值的膜。

只是移動meta_query參數到基本查詢正常工作:

query = new \WP_Query(array(
    'numberposts' => -1, 
    'post_type'  => 'film', 
    'meta_key'  => 'showings_%_start_datetime', 
    'meta_value' => array(time(), strtotime('+7 days')), 
    'meta_type'  => 'NUMERIC', 
    'meta_compare' => 'BETWEEN', 
    'orderby'  => 'meta_value_num', 
    'order'   => 'ASC', 
)); 
相關問題