自定义循环不显示所有可用的帖子

时间:2017-11-19 13:33:10

标签: php wordpress advanced-custom-fields acfpro

我正在使用我正在处理的自定义Wordpress / ACF循环。

这个想法是它显示了“事件”中的最新帖子。邮件类型,隐藏事件日期已过去的任何帖子。

如果日期已过,帖子会隐藏。但是循环没有显示可用的全部帖子。目前在下面的循环中,它只显示了可用的10个中的6个。

我已经检查了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 个答案:

答案 0 :(得分:0)

如果您要比较日期,则需要将它们转换为适当的类型。将它们转换为Unix时间戳,然后您可以轻松比较日期已超过。目前你正在比较哪个字符串大于另一个字符串有时会起作用,但使用Unix时间戳更可靠,因为你的日期格式总是需要匹配。

if(strtotime(get_field('event-date')) > date('U')) {
    //Your code here
}

答案 1 :(得分:0)

只需打印#34之前的比较日期,如果&#34;声明,你会看到你犯了什么错误。

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

可能是因为无效的日期格式,空的$ expire字段等等。无论如何,您将看到实现该打印后的原因。

答案 2 :(得分:0)

此问题的解决方案是将循环更改为:

<?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(); ?>