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.
Verwenden Sie nicht
the_date()
, sondern verwenden Siethe_time()
.the_date liefert nur das Datum, the_time liefert das Datum + die Uhrzeit. Ich weiß nicht, warum WordPress nicht mehr als ein Datum zurückgibt, wenn
the_date
es in einer Schleife verwendet wird. Das hat aber damit zu tun, dass der Wert der gleiche ist. Wenn Siethe_time
den Wert nie gleich verwenden, wird immer der Wert zurückgegeben. So kann man sowas drucken<?php the_time('F j, Y'); ?>
Dieser Link aus dem Codex erklärt, wie the_date viel besser funktioniert als ich.
quelle
Brutale Kraft es.
Arbeitete für mich, zeigt das vollständige Datum und die Uhrzeit für jeden Beitrag an, unabhängig davon, ob es das gleiche Datum ist oder nicht.
quelle
Es taucht nur einmal auf, denn so würde ein Tagebuch funktionieren. Es würde das Datum oben anzeigen und Sie würden Ihre Einträge darunter schreiben. Ich benutze diesen Code, um die Daten für jeden Beitrag mit the_time anzuzeigen.
Für weitere Informationen habe ich hier ein Tutorial dazu geschrieben: Warum die Funktion the_date () in WordPress nur einmal im ersten Beitrag angezeigt wird
quelle