我在特定页面上列出了一堆事件。每个活动都是一个帖子。我需要它们按照发生的顺序显示,而不是发布日期的顺序。所以,我创建了一个名为TheDate的自定义字段,并以此格式输入每个日期:20110306。
然后,我写了这样的查询:
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)
如果您的问题代码与您的问题一样,您可能需要尝试在add_filter
之前拨打query_posts
电话。
如果您使用的是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,
)
);