У меня проблемы с пользовательским циклом 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>
Если вы собираетесь сравнивать даты, вам необходимо преобразовать их в соответствующие типы. Преобразуйте их в метку времени Unix, и вы сможете легко сравнить, когда дата превысила. В данный момент вы сравниваете, какая строка больше другой, которая иногда работает, но гораздо надежнее использовать временную метку Unix, поскольку ваши форматы даты всегда должны совпадать.
if(strtotime(get_field('event-date')) > date('U')) {
//Your code here
}
Просто напечатайте сравниваемые даты перед «если», и вы увидите, где вы допустили ошибку.
echo $expire.'__'.$today.'<br>';
if( $expire > $today )
Это может быть из-за неправильного формата даты, пустого поля $ expire и т. Д. В любом случае, вы увидите причину после реализации этой печати.
Решением этой проблемы было изменение цикла на:
<?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(); ?>