如何在自定义字段上使用带有日期过滤器的Query_Posts()?

时间:2010-09-29 作者:jessegavin

我定义了一个自定义帖子类型,它使用一个元字段来存储日期。

在我的功能中。php我有以下保存开始日期的代码。中发送的日期格式startdate 表单参数为2010/12/01 9:00 AM

add_action(\'save_post\', \'save_details\');

function save_details(){
    global $post;
    update_post_meta($post->ID, "startdate", $_POST["startdate"]);
}
我正在尝试输出一个包含所有事件的列表startdate 晚于当前时间。

query_posts(array(
    \'post_type\' => array(\'seminar\'),
    \'meta_key=startdate\',
    \'meta_value=\'.date("Y/m/d h:i A"),
    \'meta_compare=>\'
));
这将列出所有事件,无论其开始日期如何。我做错了什么?

已解决:

由于某种原因,在我将代码更改为以下内容后,它就正常工作了。

$args = array(
    \'post_type\' => array(\'seminar\'),
    \'showposts\' => 3,
    \'meta_key\' => \'startdate\',
    \'meta_value\' => date("Y/m/d h:i A"),
    \'meta_compare\' => \'>\',
    \'orderby\' => \'meta_value\',
    \'order\' => \'ASC\'
);

$seminars = get_posts($args);
我将选择@Rarst中的答案作为公认的答案,因为我认为我实际上在这里遇到了多个问题,但他的回答与标题best有关。

@sorich87对于如何将日期存储为时间戳有一个很好的观点,但最后,@Rarst是正确的,如果我为date() 函数,该函数与我在将数据存储到数据库时使用的格式相匹配,然后我应该能够比较数据。

谢谢你的帮助。

3 个回复
最合适的回答,由SO网友:Rarst 整理而成

您将日期存储为格式化字符串,但time() 用于比较的函数返回数字时间戳。因此,您试图在太完全不同的格式之间进行比较,而WP不太可能聪明到能够做到这一点。

SO网友:sorich87

在存储之前,我会将日期转换为时间戳:

add_action(\'save_post\', \'save_details\');

function save_details(){
    global $post;
    update_post_meta($post->ID, "startdate", strtotime($_POST["startdate"]));
}
并使用当前时间戳进行比较:

query_posts(array(
    \'post_type\' => array(\'seminar\'),
    \'meta_key=startdate\',
    \'meta_value=\'.time(),
    \'meta_compare=>\'
));

SO网友:user2823361

在数据库中保存值,如:

\'enddate\'   =>  date(\'Y-m-d\');
生成元查询,如:

A.条件:

$conArr[0]  =    array
(
\'key\'=> \'enddate\',
\'value\' => date(\'Y-m-d\'),
\'compare\' => \'>=\',
);
B.查询:

$args = array(
    \'meta_query\'=>$conArr ,
    \'post_type\'=>\'tournament\',
    \'orderby\' => \'meta_value_num\', 
)
重要事项\'orderby\' => \'meta_value_num\', 日期格式很重要。

结束

相关推荐