duankuai6586 2014-05-28 06:44
浏览 15
已采纳

自定义帖子类型:事件 - 显示未来30天的即将发生的事件

I need to display the upcoming events for next 30 Days and sort the same based on custom date field.

Below is the code I am using right now but not got any success in hiding old Events and restricting events to 30 Days.

<?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>

Note: Date saved in database is in this format date('d F, Y') and I cannot change it to timestamp while saving because creating meta-fields using a plugin.

Please help me out.

Regards

  • 写回答

1条回答 默认 最新

  • doulong1987 2014-05-28 11:36
    关注

    If dates are stored as a formatted text string, you'll need to convert them back to a date, then filter and sort them. My guess is that when you run this code, an event on 03 June will show before a date on 30 January.

    Here's how I would approach this:

    <?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']);
    } ?>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)