WordPress:在自定义字段中使用Where子句

时间:2011-03-07 16:08:33

标签: wordpress where-clause

我在特定页面上列出了一堆事件。每个活动都是一个帖子。我需要它们按照发生的顺序显示,而不是发布日期的顺序。所以,我创建了一个名为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' );

我认为这只是我使用这个过滤器的地方,我可能在错误的地方。或者过滤器本身可能不好。任何帮助或指导将不胜感激。谢谢!

1 个答案:

答案 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,
  )
);