2013-05-16 48 views
8

我正努力通過wp_query獲得工作解決方案。我目前有一些自定義設置被分配到帖子,一個是該帖子是否是「精選」,第二個是該帖子結束的日期和時間(不再顯示在結果中)。我有查詢與功能的工作,只是需要把這個結束日期工作了進去,這裏是查詢工作找到的「特色」:包含meta和大於日期的帖子查詢

WP_Query('meta_key=skyali_feature&showposts=4&orderby=post_date'); 

結束日期設定在wp_postmeta表,其中meta_key是'the_date'和meta_values看起來像'05/16/2013 05:24'。我想編輯上面的查詢,如果'the_date'已被設置,只有當'the_date'大於今天的日期和時間時,纔會包含帖子。

這裏是我的失敗嘗試:

WP_Query(
    'meta_key=skyali_feature&meta_key=the_date&meta_compare=>=&meta_value=' 
    .date('d/m/Y H:i') 
    .'&showposts=4&orderby=post_date&orderby=the_date' 
); 

回答

13

我必須做一些非常相似最近和最終需要使用meta_query屬性。你會想要做這樣的事情:

$today = date('Ymd'); 
$args = array(
    'post_type' => 'post', 
    'posts_per_page' => '4', 
    'meta_key' => 'the_date', 
    'meta_query' => array(
     array(
      'key' => 'skyali_feature' 
     ), 
     array(
      'key' => 'the_date', 
      'value' => $today, 
      'compare' => '>=' 
     ) 
    ), 
    'orderby' => 'meta_value_num', 
    'order' => 'ASC' 
); 

$your_custom_query = new WP_Query($args); 

的幾個注意事項...

  • 我只需要按日期在我的例子來過濾,但它看起來像你需要在你的日期/時間。 (您可以使用所需格式調整$today變量的第一行)。

  • 使用posts_per_page而不是showpostsshowposts已棄用。

  • 注意,我已經包括了meta_key兩次(一次在陣列的頂層,一次是作爲meta_query數組中的元素。有一個已知的bug,你不能依照不同的按鍵,如果你不進行排序「T包括這種方式。我打的是一期一會呢!

希望這有助於,有樂趣!

[編輯]忘了補充您的skyali_feature鑰匙放回陣列。

+0

嗨謝謝你的回覆,我試過了但沒有結果。這是我的版本:$ today = date('d/m/Y H:i'); 的$ args =陣列( 'post_type'=> '後', 'posts_per_page'=> '4', 'meta_key'=> 'the_date', 'meta_query'=>數組( 陣列( 「鍵'=> 'the_date', '價值' 今天=> $, '比較'=> '> =' ) ), '排序依據'=> 'meta_value_num', '秩序'=> 'ASC' ); – Paul

+0

哦,我想我看到了問題。我們試圖比較* string *的值('date('d/m/YH:i')'的輸出不會像字符串那樣相似。你如何將該日期/時間存儲到你的文章?它是一個自由格式的文本字段,你只是要確保輸入你的日期和時間格式?或者它實際上是將它作爲日期/時間(或時間戳)字段存儲在數據庫中? –

+0

你是現貨我的日期格式是廢話。謝謝!! – Paul

4

使用與日期數據類型先進的自定義字段插件的人,這是你需要什麼樣的日期大於或大於等於今天:

$today = date('Ymd'); 
    $args = array(
     'post_type' => 'post',    
     'meta_key' => 'end-date', 
     'meta_query' => array(
      array(
       'key' => 'end-date' 
      ), 
      array(
       'key' => 'end-date', 
       'value' => $today, 
       'compare' => '>=' 
      ) 
     ), 
     'orderby' => 'meta_value', 
     'order' => 'ASC' 
    ); 
    $your_custom_query = new WP_Query($args); 
+0

我無法獲得這是我的查詢參數,這是由於日期格式?http://pastie.org/9433564我希望ACF可以存儲友好的日期和這些情況下的時間戳 –

+0

這對我來說非常合適使用Advanced Custom Fields Pro v5。謝謝。 –

1

使用Custom metadata manager,你會發現人們一個datepicker場被存儲爲時間戳。

所以在類似的情況下,上面的例子不起作用,你可能需要php來整理你需要比較的值。和午夜23:59:59的時間戳早一天它會做的工作:如果你也想考慮的時區設置的博客的

$yesterday = strtotime('yesterday 23:59:59'); 
    $args = array(
     'post_type' => 'post',    
     'meta_key' => 'end-date', 
     'meta_query' => array(
      array(
       'key' => 'end-date' 
      ), 
      array(
       'key' => 'end-date', 
       'value' => $yesterday, 
       'compare' => '>=' 
      ) 
     ), 
     'orderby' => 'meta_value', 
     'order' => 'ASC' 
    ); 
    $your_custom_query = new WP_Query($args); 

使用current_time()如下面的例子:

$now = current_time('timestamp'); 
    $yesterday = mktime(23, 59, 59, date('n',$now), date('j',$now)-1);