2011-03-07 47 views
0

我有一堆列在特定頁面上的事件。每個事件都是一個帖子。我需要它們按照它們發生的順序顯示,而不是發佈日期的順序。所以,我創建了一個自定義字段名爲TheDate併爲每個人在這個格式的日期請輸入:20110306.WordPress:在自定義字段中使用Where子句

然後,我寫我的查詢是這樣的:

query_posts(array ('cat' => '4', 'posts_per_page' => -1, 'orderby' => 'meta_value_num',  
'meta_key' => 'TheDate', 'order' => 'ASC')); 

完美的作品,並顯示事件按正確順序排列。但是,我也希望它僅顯示從今日起的日期。我不希望它顯示已經過去的日期。看來這樣做的方法是用「過濾器」。我試過這個,但它不起作用。

$todaysdate = date('Ymd'); 
query_posts(array ('cat' => '4', 'posts_per_page' => -1, 'orderby' => 'meta_value_num', 
'meta_key' => 'TheDate', 'order' => 'ASC')); 
function filter_where($where = '') { 
$where .= "meta_value_num >= $todaysdate"; 
return $where; 
} 
add_filter('posts_where', 'filter_where'); 

我想這只是我使用這個過濾器的地方,我可能把它放在了錯誤的地方。或者,也許過濾器本身是不好的。任何幫助或指導將不勝感激。謝謝!

+0

如若「> =」是「=>」在$其中串聯或沒有按」這很重要嗎? –

回答

0

如果您的代碼與您的問題相同,您可能需要嘗試在query_posts之前撥打add_filter

如果您正在使用的WordPress 3.1,你應該能夠使用新的meta_query參數,像這樣:

query_posts(
    array(
    'cat' => '4', 
    'meta_key' => 'TheDate', 
    'meta_query' => array(
     array(
     'key' => 'TheDate', 
     'value' => date('Ymd'), 
     'compare' => '>=', 
     'type' => 'NUMERIC' 
    ) 
    ), 
    'order' => 'ASC', 
    'orderby' => 'meta_value_num', 
    'posts_per_page' => -1, 
) 
); 
相關問題