如果有另一个帖子的日期相同,则帖子不会显示日期

时间:2014-10-28 作者:Jaeeun Lee

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

enter image description here

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

5 个回复
最合适的回答,由SO网友:Robert hue 整理而成

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

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

SO网友:kaiser

为什么不显示

当您查看the_date() 函数,然后您将注意到两个全局变量:

global $currentday, $previousday;
然后有一条规则,如果有日期要显示。。。或者不是。该检查与使用is_new_day():

if ( $currentday != $previousday ) {

    // show date

    // Set global
    $previousday = $currentday;
}
// else
return null;
如您所见$previousday 立即设置为$currentday;. 所以它会被回音一次。在那之后,两天都是一样的,检查就会失败。这就是为什么你的第一篇帖子显示了它,而其他帖子没有显示它。

为什么会显示出来

如果你问自己,为什么它会显示不止一个日期,那么在全局优化后,你必须take a look at 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 设置并检查全局。除非有new day, 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() 函数(全局检查)。它也没有过滤器。如何解决这个问题?简单:

echo apply_filters( \'the_date\', get_the_date(), get_option( \'date_format\' ), \'\', \'\' );
这将添加附加到the_date 筛选到自定义输出。它还使用默认值date_format 选项设置为默认值-由使用the_date() 也它避免了任何beforeafter 值-同样,与the_date() 作用

SO网友:gdaniel

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

\\u date只返回日期,\\u time返回日期+时间。我不知道为什么wordpress不会返回多个日期the_date 在循环中使用。但这与价值相同这一事实有关。如果您使用the_time 值从不相同,因此它总是返回值。所以你可以打印<?php the_time(\'F j, Y\'); ?>

link 从codex中,解释了\\u日期如何比我更好地工作。

SO网友:Sheba Tech

用暴力来对付它。

<?php the_time(\'F j, Y\'); ?> - <?php the_time(); ?>
为我工作,显示每个帖子的完整日期和时间,无论日期是否相同。

SO网友:Jonny Jordan

它只出现一次,因为这就是日记的工作方式。它会在顶部显示日期,你会在下面写下你的条目。我使用这个代码,用时间来显示每个帖子的日期。

<?php the_time(get_option(\'date_format\')); ?>
有关更多信息,我在这里写了一篇教程:Why the_date() Function in WordPress Only Shows Up Once on the First Post

结束