自定义循环不显示所有可用的帖子
Custom loop not displaying all available posts
我在使用自定义 Wordpress/ACF 循环时遇到问题。
想法是它显示 'events' post 类型中的最新 posts,隐藏事件日期已过的任何 posts。
如果日期已过,post 会隐藏。但是,循环并未显示可用的 post 的全部数量。目前在下面的循环中,它只显示可用的 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>
如果您要比较日期,则需要将它们转换为适当的类型。将它们转换为 Unix 时间戳,然后您可以轻松比较日期何时超过。目前您正在比较哪个字符串大于另一个字符串,这有时会起作用,但使用 Unix 时间戳更可靠,因为您的日期格式始终需要匹配。
if(strtotime(get_field('event-date')) > date('U')) {
//Your code here
}
只需在 "if" 语句之前打印比较日期,您就会看到哪里出错了。
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(); ?>
我在使用自定义 Wordpress/ACF 循环时遇到问题。
想法是它显示 'events' post 类型中的最新 posts,隐藏事件日期已过的任何 posts。
如果日期已过,post 会隐藏。但是,循环并未显示可用的 post 的全部数量。目前在下面的循环中,它只显示可用的 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>
如果您要比较日期,则需要将它们转换为适当的类型。将它们转换为 Unix 时间戳,然后您可以轻松比较日期何时超过。目前您正在比较哪个字符串大于另一个字符串,这有时会起作用,但使用 Unix 时间戳更可靠,因为您的日期格式始终需要匹配。
if(strtotime(get_field('event-date')) > date('U')) {
//Your code here
}
只需在 "if" 语句之前打印比较日期,您就会看到哪里出错了。
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(); ?>