在两个给定时间范围内显示事件

时间:2014-05-27 作者:dannyw24

我试图显示来自我的CPT命名事件的两篇不同帖子。

一个是下一个事件,另一个是上一个事件。

我有一个名为“事件日期”的元数据库,客户端现在将事件日期放在这里。

我在考虑以某种方式使用这个日期作为“破坏者”,如果它是以D.m.Y格式写的,并且该日期已经过去,那么该事件将不会显示在下一个事件中,有点像过期日期。

因此,我需要查询到元数据库中显示的最接近日期的帖子,并将该帖子显示为下一个事件。

这就是逻辑在我脑海中的运作方式,然而我似乎找不到正确的垫脚石来开始。

如果这不是很清楚,很抱歉。

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

查询元数据表的速度很慢,而且因为它也用于一般数据,所以如果在那里存储日期,则需要注意日期格式。例如,使用dmY 格式:

01112014(2014年11月1日)

  • 11012014(2014年1月11日)
  • 12052014(2014年5月12日)
    • 是“正确的”,因为数字排序正确,但从时间上讲,顺序不正确(这通常是您想要的事件)。

      因此,如果您使用的是Posteta,则必须使用时间戳或Ymd 总体安排假设如此,则可以获得“下一个”事件:

      $args = array(
          \'post_type\' => \'event\',
          \'posts_per_page\' => 1,
          \'meta_query\' => array(
              array(
                  \'key\'     => \'date\', //or whatever key you\'re using
                  \'value\'   => date_i18n( \'Ymd\' ),
                  \'compare\' => \'>=\'
              )
          ),
          \'orderby\' => \'meta_value\',
          \'meta_key\' => \'date\', //or whatever key you\'re using
          \'order\'   => \'asc\',
      );
      
      $events = get_posts( $args );
      if( $events ){
         $next_event = array_pop( $events );
      }else{
         //no event found
      }
      
      也就是说,最好避免发布元数据(出于性能考虑,如果需要的话,对于重复发生的事件更糟糕)。此外,还有大量不同的事件管理插件(我构建了:Event Organiser),它不仅为您处理所有这些,而且为用户提供了一个UI,而不是使用自定义字段。

      使用活动组织者,您可以通过以下方式获得下一个活动:

      $events = eo_get_events( array(
          \'event_start_after\' => \'now\',
          \'posts_per_page\'    => 1
      ));
      if( $events ){
         $next_event = array_pop( $events );
      }
      

    结束

    相关推荐

    Editing wp-includes/feed.php

    我不明白为什么我的RSS没有更新,在经历了很多哀嚎和咬牙切齿之后,我相信我已经通过编辑wp includes/feed在一定程度上解决了这个问题。php。我更改了以下内容:$feed->set_cache_duration( apply_filters( \'wp_feed_cache_transient_lifetime\', 12 * HOUR_IN_SECONDS, $url ) ); 对此:$feed->set_cache_duration( apply_filters( \