Пользовательский цикл не отображает все доступные сообщения

У меня проблемы с пользовательским циклом Wordpress / ACF, над которым я работаю.

Идея состоит в том, что он отображает последние сообщения в типе сообщения "события", скрывая все сообщения, где прошла дата события.

Сообщения скрываются, если дата прошла. Однако цикл не отображает полное количество доступных сообщений. В настоящее время с циклом ниже, он показывает только 6 из 10 доступных.

Я проверил настройки чтения в Wordpress, и это нормально.

Код, который я использую для моего цикла:

<ul class="events-list">

<?php 
    $loop = new WP_Query( array( 
        'post_type' => 'events',
        'posts_per_page' => -1,
        'orderby' => 'meta_value',
        'order' => 'ASC',
        'meta_type' => 'DATE',
        'meta_key' => 'event-date'
    ));

    while ( $loop->have_posts() ) : $loop->the_post(); 

    $today = date('dmY');
    $expire = get_field('event-date');

    if( $expire > $today )

{ ?>

    <li>
        <h3><?php the_field('event-date'); ?> - <?php the_title(); ?></h3>
        <span class="time"><?php the_field('event-time'); ?></span>
        <?php the_field('event-details'); ?>
    </li>

<?php; } endwhile; wp_reset_query(); ?>

</ul>

3 ответа

Решение

Решением этой проблемы было изменение цикла на:

<?php 

    $today = date('Ymd');

    $loop = new WP_Query( array( 
        'post_type' => 'events',
        'showposts' => 2,
        'meta_key' => 'event-date',  
        'meta_compare' => '>',  
        'meta_value' => date("Ymd"),
        'orderby' => 'meta_value_num',
        'order' => 'ASC'
    ));

    while ( $loop->have_posts() ) : $loop->the_post(); 

{ ?>

Post stuff here

<?php; } endwhile; wp_reset_query(); ?>

Просто напечатайте сравниваемые даты перед "если", и вы увидите, где вы допустили ошибку.

echo $expire.'__'.$today.'<br>';
if( $expire > $today )

Это может быть из-за неверного формата даты, пустого поля $expire и т. Д. В любом случае, вы увидите, в чем причина после реализации этой печати.

Если вы собираетесь сравнивать даты, вам необходимо преобразовать их в соответствующие типы. Конвертируйте их в метку времени Unix, и вы сможете легко сравнить, когда дата превысила. В данный момент вы сравниваете, какая строка больше, чем другая, которая иногда работает, но гораздо надежнее использовать метку времени Unix, поскольку ваши форматы даты всегда должны совпадать.

if(strtotime(get_field('event-date')) > date('U')) {
    //Your code here
}
Другие вопросы по тегам