【问题标题】:Custom Post Type: Event - Display Upcoming Events for Next 30 Days自定义帖子类型:事件 - 显示未来 30 天即将发生的事件
【发布时间】:2014-05-28 06:44:42
【问题描述】:

我需要显示未来 30 天即将发生的事件,并根据自定义日期字段对其进行排序。

下面是我现在使用的代码,但在隐藏旧事件并将事件限制为 30 天方面没有取得任何成功。

<?php 
    $todayDate = date('d F, Y');
    $futureDate = strtotime ( '+30 days' , strtotime ( $todayDate ) ) ;
    $futureDate = date ( 'd F, Y' , $futureDate );
    $eventsOpt = array(         
        'post_type' => 'ptype_events',
        'posts_per_page' => -1,
        'meta_key' => 'ptype_event_date',
        'meta_compare' => '>=',
        //'meta_value' => $todayDate,
        'orderby' => 'meta_value',
        'order' => 'ASC',
    );
    $events_query = new WP_Query($eventsOpt);
?>
<div class="eventsPosts">
  <?php while ($events_query->have_posts()) : $events_query->the_post(); 
            $date = get_post_meta($post->ID, 'ptype_event_date', true);
        ?>
  <div class="eventsPost clearfix">
    <h3 class="title">
      <?php the_title()?>
    </h3>
    Date: <?php echo $date ?> </div>
  <?php endwhile; ?>
  <?php wp_reset_query() ?>
</div>

注意:数据库中保存的日期格式为date('d F, Y'),我无法在保存时将其更改为时间戳,因为使用插件创建元字段。

请帮帮我。

问候

【问题讨论】:

    标签: php metadata custom-post-type wordpress


    【解决方案1】:

    如果日期存储为格式化的文本字符串,您需要将它们转换回日期,然后对其进行过滤和排序。我的猜测是,当您运行此代码时,6 月 3 日的事件将在 1 月 30 日的日期之前显示。

    以下是我的处理方法:

    <?php 
    //Get all the events
    $eventsOpt = array(         
        'post_type' => 'ptype_events',
        'posts_per_page' => -1,
        'meta_key' => 'ptype_event_date',
        'orderby' => 'meta_value',
        'order' => 'ASC',
    );
    $events_query = new WP_Query($eventsOpt);
    
    //Loop through them and filter out events before today and events in more than 1 month
    $events_out = array();
    while ($events_query->have_posts()) : $events_query->the_post(); 
       $ed = strtotime( get_post_meta($post->ID, 'ptype_event_date', true) );
       $temp = array();
       if ( $ed !== FALSE && $ed >= time() && $ed <= strtotime('+1 month') ) :
          $temp['date'] = date('d F, Y', $ed);
          $temp['title'] = get_the_title();
          $events_out[$ed] = $temp;
       endif;
    endwhile;
    wp_reset_query();
    
    //Sort the events by date
    ksort( $events_out );
    
    //Write the output
    $format = <<<EOF
    <div class="eventsPost clearfix">
       <h3 class="title">
          %s
       </h3>
       Date: %s </div>
    EOF;
    
    foreach ($events_out as $event) {
       printf ($format, $event['title'], $event['date']);
    } ?>
    

    【讨论】:

    • 您好 cpilko,感谢您的回答,做了一些修改,现在代码运行完美。再次感谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    相关资源
    最近更新 更多