Dlaczego się nie pokazuje?
Kiedy spojrzysz na źródło the_date()
funkcji, zauważysz dwa globale:
global $currentday, $previousday;
A potem jest zasada, czy jest data do wyświetlenia ... czy nie. Kontrola jest podobna do tej przeprowadzanej za pomocą is_new_day()
:
if ( $currentday != $previousday ) {
// show date
// Set global
$previousday = $currentday;
}
// else
return null;
Jak widać, $previousday
natychmiast ustawia się na $currentday;
. Więc raz echo. Zaraz potem oba dni są takie same, a sprawdzenie się nie powiedzie. To jest powód, dla którego twój pierwszy post wyświetla go, ale inni go nie pokazują.
Dlaczego to pokazuje?
Jeśli zadajesz sobie pytanie, dlaczego pokazuje więcej niż jedną datę, po tym, jak globalizacja zostanie zrównana, będziesz musiał rzucić okiemsetup_postdata()
. Ta funkcja jest wywoływana przez the_post();
i jest odpowiedzialna za skonfigurowanie wszystkiego dla pojedynczego postu w pętli.
if ( have_posts() )
{
while ( have_posts() )
{
the_post(); # <-- Calls setup_postdata( $post );
// your loop stuff here
}
}
Elementy wewnętrzne setup_postdata()
są dość łatwe do zrozumienia (przynajmniej do tego, co ustawiają globały):
$currentday = mysql2date('d.m.y', $post->post_date, false);
$currentmonth = mysql2date('m', $post->post_date, false);
Zatem ruchoma część jest $previousday
względem której $currentday
globalny zostaje ustawiony i sprawdzony. I dopóki nie będzie nowego dnia , the_date()
niczego nie wyświetli.
Po prostu ustaw swoje posty na zupełnie inne dni i nagle zobaczysz datę pojawiającą się na każdym postu.
Jaki jest tego pomysł?
W rzeczywistości pomysł jest dość prosty i obecny od wersji 0.7.1 - przynajmniej tak stwierdza phpDocBlock: Dlaczego chciałbyś wyświetlać datę każdego postu w archiwum? Archiwum wygląda następująco:
+--------------+
| 28.10.2014 |
+--------------+
| Post Title A |
| Post Title B |
+--------------+
| 29.10.2014 |
+--------------+
| Post Title C |
| Post Title D |
+--------------+
Nie zgadzasz się z tym? Cóż, po prostu używasz funkcji, która miała być czymś zupełnie innym.
Dlaczego get_the_date()
działa i jak używać go we właściwy sposób
Nie ma wpływu na if / else w the_date()
funkcji (sprawdzenie globalne). To też ma nie mieć filtr. Jak to naprawić? Prosty:
echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );
Dodaje to wszelkie wywołania zwrotne dołączone do the_date
filtra do niestandardowego wyjścia. Używa również domyślnego date_format
ustawienia opcji jako domyślnego - które również jest używane the_date()
. I unika wszelkich wartości before
i after
- ponownie, dokładnie jako the_date()
funkcji.