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.
Nie używaj
the_date()
, zamiast tego używajthe_time()
.the_date zwraca tylko datę, the_time zwraca datę + czas. Nie znam powodu, dla którego wordpress nie zwróci więcej niż jednej daty, gdy
the_date
jest używany w pętli. Ale ma to związek z faktem, że wartość jest taka sama. Jeśli użyjeszthe_time
wartości, nigdy nie będzie taka sama, dlatego zawsze zwraca wartość. Możesz więc wydrukować coś podobnego<?php the_time('F j, Y'); ?>
Ten link z kodeksu wyjaśnia, w jaki sposób the_date działa o wiele lepiej niż ja.
źródło
Brutalna siła.
Pracował dla mnie, wyświetla pełną datę, godzinę dla każdego postu, niezależnie od tego, czy jest to ta sama data, czy nie.
źródło
Pojawia się tylko raz, ponieważ tak działałby pamiętnik. Na górze widniałaby data, a poniżej wpisy. Używam tego kodu, aby wyświetlić daty dla każdego postu, używając the_time.
Aby uzyskać więcej informacji, napisałem samouczek na ten temat tutaj: Dlaczego funkcja the_date () w WordPress pojawia się tylko raz w pierwszym poście
źródło