Отфильтровать сообщения о событиях старше текущей даты

как отфильтровать сообщения о событиях, дата которых старше текущей даты? мой текущий код добавляет класс с истекшим сроком действия к событию, если срок действия этого события истек, но поскольку мне нужно отобразить следующие 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;?>

помогите кто нибудь :(


person Amesey    schedule 23.02.2013    source источник


Ответы (1)


Хорошо, чтобы ответить на ваш вопрос. Вы можете сравнивать даты, используя meta_value, но имейте в виду, что эти даты должны быть в формате Mysql ГГГГ-ММ-ДД для сравнения в базе данных. Таким образом, ваше пользовательское поле должно быть в этом формате, или вам нужно переформатировать его в своем коде, прежде чем использовать его. Вот хорошая тема в стеке Wordpress по этому поводу;

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; ?>
person McNab    schedule 23.02.2013
comment
Отлично, рад, что помогло :) - person McNab; 23.02.2013