【问题标题】:Filter out event posts older than current date过滤掉早于当前日期的事件帖子
【发布时间】:2013-02-09 02:59:31
【问题描述】:

如何过滤掉日期早于当前日期的活动帖子?如果该事件已过期,我当前的代码会向该事件添加一个过期的类,但因为我需要显示接下来的 5 个即将发布的帖子,当前代码实际上根本没有显示任何事件帖子......这是我的代码......

<?php 

 wp_reset_query();

 query_posts(array('post_type' => 'events',
           'showposts' => 5,
                   'meta_key'=>'event_date',  
           'orderby' => 'meta_value', 
           'order' => ASC));
            ?>


            <?php while (have_posts()) : the_post(); ?>

            <?php 

$eventDate = DateTime::createFromFormat('Ymd', get_field('event_date'));
$currentDate = new DateTime();

          ?>

             <li class="<? if ($eventDate < $currentDate) { echo "expired"; } ?>">
             <h4><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h4>
             <span class="date"><strong>Event Date:</strong> <? echo $eventDate->format('d/m/Y'); ?></span></li>

            <?php endwhile;?>

请帮助某人:(

【问题讨论】:

    标签: php wordpress date filtering


    【解决方案1】:

    好的,回答您的问题。您可以使用元值比较日期,但请记住,这些日期需要采用 Mysql 格式 YYYY-MM-DD 才能在数据库中进行比较。因此,您的自定义字段需要采用该格式,或者您需要在使用之前在代码中重新格式化它。这是 Wordpress Stack 上的一个很好的主题;

    https://wordpress.stackexchange.com/questions/18303/fail-to-compare-dates-in-meta-query

    我没有对此进行测试,但它应该为您指明正确的方向;

                $eventDate = date('Y-m-t', get_field('event_date'));
                $currentDate = date('Y-m-t');  
    
                $args = array(
                    'post_type' => 'events',
                    'posts_per_page' => '-1',
                    'orderby'  => 'meta_value',
                    'meta_query' => array(
                        'relation' => 'AND',
                        array(
                        'key' => $eventDate,
                        'value' => $currentDate,
                        'compare' => '>',
                        'type' => 'DATE'
                        )
                    )   
                );
    

    当然,另一种方法是将所有帖子拉到您的查询中,设置一个计数器并显示满足您条件的前五个;

    <?php
     $counter = 0;
    
     query_posts(array('post_type' => 'events',
                       'posts_per_page' => -1,
                       'meta_key'=>'event_date',  
                       'orderby' => 'meta_value', 
                       'order' => ASC));
    
     while (have_posts()) : the_post(); 
    
        $eventDate = DateTime::createFromFormat('Ymd', get_field('event_date'));
        $currentDate = new DateTime();
    
        if ( ($eventDate > $currentDate) && $counter<5) : ?>
    
    
          <li class="<? if ($eventDate < $currentDate) { echo "expired"; } ?>">
             <h4><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h4>
             <span class="date"><strong>Event Date:</strong> <? echo $eventDate->format('d/m/Y'); ?></span></li>
    
          <?php
          $counter++;
    
        endif; ?>
    

    【讨论】:

    • 非常好,很高兴它有帮助:)
    猜你喜欢
    • 2013-02-09
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    相关资源
    最近更新 更多