我得到的帖子将起始日期作为自定义字段值。我在侧边栏中按升序显示了其中的几篇文章,以便首先显示最接近开始日期的文章。这就是我所拥有的,而且效果很好:
<?php query_posts(\'&post_type=events&posts_per_page=5&meta_key=start_date&orderby=meta_value&order=asc\'); ?><?php while ( have_posts() ) : the_post(); ?><li><span class="eventtext"><?php the_title(); ?></span>
但我想知道,如何过滤查询,使其不会显示开始日期已过的帖子?
我尝试过这个:
$today = date(\'d/m/Y\', strtotime(\'+2 hours\'));
query_posts(array(
\'post_type\' => \'events\',
\'posts_per_page\' => 5,
\'meta_key\' => \'start_date\',
\'orderby\' => \'meta_value\',
\'order\' => \'ASC\',
\'meta_query\' => array(
array(
\'key\' => \'start_date\',
\'meta-value\' => $value,
\'value\' => \'start_date\',
\'compare\' => \'>=\',
\'type\' => \'CHAR\'
)
)
));
但它没有显示任何内容。需要注意的一点是,开始日期值以mm/dd/yyy格式保存,但更改$today的日期格式也没有帮助。
UPDATE
现在我知道了:
<?php
$today = date(\'m/d/Y\', strtotime(\'+2 hours\'));
$the_query = new WP_Query( array(
\'post_type\' => \'events\',
\'posts_per_page\' => 5,
\'meta_key\' => \'start_date\',
\'orderby\' => \'meta_value\',
\'order\' => \'ASC\',
\'meta_query\' => array(
array(
\'key\' => \'start_date\',
\'meta-value\' => \'start_date\',
\'value\' => $today,
\'compare\' => \'DATE\',
\'type\' => \'CHAR\'
))
));
?>
侧边栏中没有显示任何内容。
注意:日期采用该格式,因为帖子是以该格式保存的,并带有start\\u date自定义字段。我只是想完成这项工作,然后我会将日期格式更改为更合适的格式。
最合适的回答,由SO网友:Milo 整理而成
为了可靠地工作,数据库中的日期格式应为yyyy-mm-dd
. 比较类型应为DATE
或NUMERIC
. 如果以当前格式计算2012年4月25日的日期,并将其与1986年4月26日的日期进行数字比较,您可以看到问题是什么:25042012<;26041986
此外,如果您在主循环之外执行这些查询,请使用WP_Query.
编辑-
有几个错误您没有修复。请注意,在您修复日期格式之前,这仍然无法正常工作。
<?php
$today = date(\'m/d/Y\', strtotime(\'+2 hours\'));
$the_query = new WP_Query( array(
\'post_type\' => \'events\',
\'posts_per_page\' => 5,
\'meta_key\' => \'start_date\',
\'orderby\' => \'meta_value\',
\'order\' => \'ASC\',
\'meta_query\' => array(
array(
\'key\' => \'start_date\',
\'value\' => $today,
\'compare\' => \'>=\',
\'type\' => \'DATE\'
))
));
?>