如果还有其他同一日期的帖子,则该帖子不显示日期


19

我有自定义帖子类型“新闻”。并制作了一个页面模板以查询该类型的帖子。这些帖子应该显示其发布日期,但是如果有多个具有相同日期的帖子,则仅第一篇帖子显示日期,而其他帖子则不显示。有没有办法显示每个帖子的日期?

在此处输入图片说明

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

Answers:


40

我过去曾遇到过类似的问题,因为我修改了日期函数。然后,如果只有每个帖子具有不同的日期,则帖子将显示日期,否则返回空白。

尝试添加<?php echo get_the_date(); ?>


26

为什么不显示?

当您查看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()工作和如何使用它的正确方法

它不受the_date()函数中的if / else (全局检查)的影响。它也没有具有过滤器。如何解决?简单:

echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );

这会将附加到the_date过滤器的所有回调添加到您的自定义输出中。它还使用默认date_format选项设置作为默认值-也被使用the_date()。而且它避免了任何beforeafter值-再次完全与the_date()函数相同。


1
谢谢凯撒。这就解释了为什么有时无法打印日期。非常感谢。
罗伯特·

1
非常全面的解释。比接受的答案更好。
Nilambar Sharma 2014年

1
@Nilambar可接受的答案是tl; dr版本,非常好:)
kaiser

道具挖掘到这个@kaiser -更深入的了解比我预期这样一个平凡的问题
serraosays

1
这个答案比WP docs的解释更好。
伊恩

10

不要使用the_date(),而是使用the_time()

the_date仅返回日期,the_time返回日期+时间。我不知道the_date在循环中使用wordpress不会返回多个日期的原因。但它与值相同的事实有关。如果使用the_time的值永远不会相同,那么它总是返回该值。所以你可以打印类似<?php the_time('F j, Y'); ?>

这个来自法典的链接解释了the_date如何比我更好地工作。


1

蛮力吧。

<?php the_time('F j, Y'); ?> - <?php the_time(); ?>

为我工作,显示每个帖子的完整日期和时间,无论日期是否相同。


0

它只显示一次,因为这是日记的工作方式。它会在顶部显示日期,并且您会在其下方输入条目。我使用这段代码使用the_time显示每个帖子的日期。

<?php the_time(get_option('date_format')); ?>

有关更多信息,我在这里编写了有关它的教程:为什么WordPress中的the_date()函数仅在第一篇文章中显示一次


请注意,如果您想推广自己的产品/博客,则必须披露您的隶属关系,否则您的答案可能被标记为垃圾邮件。请阅读“ 如何成为垃圾邮件发送者”
DavidPostill '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.