<?php get_header(); ?>
<?php
$wp_query = new WP_Query();
$wp_query -> query('post_type=press&showposts=100');
while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
<div id="press">
<div class="press-item cf">
<div class="press-img"><a href="<?php the_field('link'); ?>"><?php the_post_thumbnail('medium');?></a> </div>
<div class="press-content">
<div class="press-title"><a href="<?php the_field('link'); ?>"><?php echo get_the_title(); ?></a> </div>
<div class="press-excerpt"><?php the_excerpt(); ?> </div>
<div class="press-date"><?php the_date(); ?></div>
</div>
</div>
</div>
<?php endwhile; ?>
<?php get_footer(); ?>
#1 楼
我过去曾遇到过类似的问题,因为我修改了日期函数。然后如果只有每个帖子具有不同的日期,则帖子将显示日期,否则返回空白。 />
#2 楼
为什么不显示?查看
the_date()
函数的源代码时,您会注意到两个全局变量:global $currentday, $previousday;
那么就有规则显示是否要显示日期...。该检查类似于使用
is_new_day()
进行的检查:if ( $currentday != $previousday ) {
// show date
// Set global
$previousday = $currentday;
}
// else
return null;
如您所见,
$previousday
立即设置为$currentday;
。因此,它会回声一次。在那之后,这两天都是一样的,检查将失败。这就是为什么您的第一篇文章显示它的原因,而其他人却不显示它。为什么显示它?
如果您问自己为什么它显示的内容超过一个日期,在全局变量获得均衡之后,您将不得不看看
setup_postdata()
。该函数由the_post();
调用,负责为循环中的单个帖子设置所有内容。if ( have_posts() )
{
while ( have_posts() )
{
the_post(); # <-- Calls setup_postdata( $post );
// your loop stuff here
}
}
setup_postdata()
的内部结构很容易理解(至少到设置全局变量的位置):$currentday = mysql2date('d.m.y', $post->post_date, false);
$currentmonth = mysql2date('m', $post->post_date, false);
所以运动的部分是
$previousday
,对它设置并检查了$currentday
全局变量。除非有新的一天,否则the_date()
将不会显示任何内容。只需将您的帖子设置为完全不同的日期,突然您就会看到日期出现在每个帖子上。
实际上,这个想法很简单,并且从v0.7.1开始就存在-至少这是phpDocBlock所说的:为什么要在存档中显示每个帖子的日期? ?存档看起来像这样:
+--------------+
| 28.10.2014 |
+--------------+
| Post Title A |
| Post Title B |
+--------------+
| 29.10.2014 |
+--------------+
| Post Title C |
| Post Title D |
+--------------+
您不同意吗?好吧,那么您只是在使用一个本来应该完全不同的函数。通过
get_the_date()
函数中的if / else(全局检查)。它还没有过滤器。如何解决?简单:echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );
这会将附加到
the_date()
过滤器的所有回调添加到您的自定义输出中。它还将默认的the_date
选项设置用作默认设置-date_format
也使用该设置。而且它避免了任何the_date()
和before
值-再次与after
函数完全相同。#3 楼
不要使用the_date()
,而要使用the_time()
。the_date仅返回日期,the_time返回日期+时间。我不知道在循环中使用
the_date
时wordpress不会返回多个日期的原因。但它与值相同的事实有关。如果使用the_time
,则该值永远不会相同,因此它将始终返回该值。因此,您可以打印类似<?php the_time('F j, Y'); ?>
的内容来自法典的链接,解释了the_date如何比我更好地工作。
#4 楼
蛮力的。<?php the_time('F j, Y'); ?> - <?php the_time(); ?>
为我工作,无论日期是否相同,都显示每个帖子的完整日期和时间。
#5 楼
它只显示一次,因为这是日记的工作方式。它会在顶部显示日期,并且您会在其下方写下您的条目。我使用此代码通过the_time显示每个帖子的日期。<?php the_time(get_option('date_format')); ?>
有关更多信息,我在此处编写了一个教程:为什么在WordPress中使用the_date()函数在第一篇文章中只显示一次
评论
请注意,如果您要推广自己的产品/博客,则必须披露您的隶属关系,否则您的答案可能被标记为垃圾邮件。请阅读如何成为垃圾邮件发送者
– DavidPostill
17年4月9日在11:32
评论
谢谢凯撒。这就解释了为什么有时无法打印日期。非常感谢。
– Robert hue
2014年10月29日,下午1:58
非常全面的解释。比接受的答案更好。
– Nilambar Sharma
14-10-29在3:43
@Nilambar可接受的答案是tl; dr版本,非常好:)
– kaiser
14-10-29在3:48
深入探讨这个@kaiser的道具-在如此平凡的问题上比我期望的要深入
–赛龙
16-10-13在0:02
这个答案比WP docs的解释更好。
–伊恩
17-4-9在22:19