Warum wird es nicht angezeigt?
Wenn Sie sich die Quelle der the_date()
Funktion ansehen , werden Sie zwei globale Merkmale bemerken:
global $currentday, $previousday;
Und dann gibt es eine Regel, ob ein Datum angezeigt werden soll oder nicht. Die Prüfung ähnelt der Prüfung mit is_new_day()
:
if ( $currentday != $previousday ) {
// show date
// Set global
$previousday = $currentday;
}
// else
return null;
Wie Sie sehen, wird das $previousday
sofort eingestellt $currentday;
. Also wird es einmal wiederholt. Danach sind beide Tage gleich und die Prüfung schlägt fehl. Das ist der Grund, warum dein erster Post ihn anzeigt, die anderen aber nicht.
Warum zeigt es?
Wenn Sie sich fragen, warum es dann mehr als ein Datum anzeigt, nachdem das globale Datum angepasst wurde, müssen Sie es sich ansehensetup_postdata()
. Diese Funktion wird von aufgerufen the_post();
und ist dafür verantwortlich, alles für einen einzelnen Post in der Schleife einzurichten.
if ( have_posts() )
{
while ( have_posts() )
{
the_post(); # <-- Calls setup_postdata( $post );
// your loop stuff here
}
}
Die Interna von setup_postdata()
sind recht einfach zu verstehen (zumindest was die Globalen eingestellt bekommen):
$currentday = mysql2date('d.m.y', $post->post_date, false);
$currentmonth = mysql2date('m', $post->post_date, false);
Der bewegliche Teil ist also derjenige, $previousday
gegen den das $currentday
Globale gesetzt und geprüft wird. Und wenn es keinen neuen Tag gibt , the_date()
wird nichts angezeigt.
Stellen Sie einfach Ihre Beiträge auf ganz andere Tage ein und plötzlich wird das Datum auf jedem Beitrag angezeigt.
Was ist die Idee dahinter?
Eigentlich ist die Idee seit v0.7.1 ziemlich einfach und präsent - zumindest heißt es in phpDocBlock so: Warum möchten Sie das Datum für jeden Beitrag in einem Archiv anzeigen? Ein Archiv sieht so aus:
+--------------+
| 28.10.2014 |
+--------------+
| Post Title A |
| Post Title B |
+--------------+
| 29.10.2014 |
+--------------+
| Post Title C |
| Post Title D |
+--------------+
Sie stimmen dem nicht zu? Nun, dann verwenden Sie einfach eine Funktion, die etwas völlig anderes sein sollte.
Warum tut get_the_date()
Arbeit und wie sie die verwenden richtigen Weg
Es ist nicht betroffen von dem if / else in der the_date()
Funktion (dem Globals Check). Es hat auch nicht den Filter. Wie kann man das beheben? Einfach:
echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );
Dadurch werden alle an den the_date
Filter angehängten Rückrufe zu Ihrer benutzerdefinierten Ausgabe hinzugefügt. Es wird auch die Standardoptionseinstellung date_format
als Standardeinstellung verwendet, die auch von verwendet wird the_date()
. Und es vermeidet alle before
und after
Werte - genau wie die the_date()
Funktion.