为什么不显示
当您查看
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()
也它避免了任何
before
和
after
值-同样,与
the_date()
作用