根据帖子的自定义字段日期值显示仅包含即将到来的日期的帖子

时间:2012-04-25 作者:Andrew

我得到的帖子将起始日期作为自定义字段值。我在侧边栏中按升序显示了其中的几篇文章,以便首先显示最接近开始日期的文章。这就是我所拥有的,而且效果很好:

<?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自定义字段。我只是想完成这项工作,然后我会将日期格式更改为更合适的格式。

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

为了可靠地工作,数据库中的日期格式应为yyyy-mm-dd. 比较类型应为DATENUMERIC. 如果以当前格式计算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\'
  ))
));
?>

结束

相关推荐

Update all posts at once

我已经在我的帖子中添加了一个自定义分类法,它将在post\\u update操作中获得iteself的值。一次更新所有帖子的SQL查询是什么,以便为每个帖子添加分类法值。从SQL更新还会调用wordpress的update\\u post操作吗?