WP_Query按Custom Post Type的值过滤

时间:2014-01-04 22:51:53

标签: wordpress

我无法按自定义帖子类型

过滤结果

这是我的while循环,返回所有项目。我需要按日期过滤,只显示早于CURDATE()

的日期
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$auction_query = new WP_Query();
$auction_query->query('post_type=auctions&orderby=meta_value&meta_key=auction_details&paged='.$paged.'&posts_per_page=20');

在我的wp_postmeta表中,我有以下数据

meta_id: [id of meta row]
post_id: [id of post]
meta_key: auction_details
meta_value: a:6:{s:12:"auction_date";s:10:"2013-07-27";s:12:"auction_time";s:21:"9am Personal Property";s:16:"auction_location";s:44:"New Providence,";s:0:""

与meta_key auction_details配对时,我需要按元值列中的拍卖日期值进行过滤,该meta_key auction_details仅显示auction_date早于今天日期的帖子。

1 个答案:

答案 0 :(得分:0)

使用CURDATE是没有意义的,因为用于存储post_meta值的MySQL字段类型是字符串,而不是日期。

考虑存储您的时间和日期值

  • 在单独的帖子元字段中,
  • 作为unix时间戳(数字值)。

然后,您可以轻松地使用>限制查询。或者<比较,像

$args = array(
    'meta_query' => array(
        array(
            'key' => 'auction_time',
            'value' => date_i18n( 'U' ),
            'compare' => '<',
        )
    )
);
$auction_query = new WP_Query( $args );

如果您想按此字段订购,请务必按'meta_value_num'排序,而不是通常的'meta_value',因为后者会以词汇方式排序您的帖子而不是数字。

(提醒一句:注意使用date_i18n()(WordPress使用WordPress时区首选项提供的功能)而不是date()(使用PHP中系统范围的时区设置的本机PHP函数) )在使用WordPress时转换时间戳。)