Perché non mostra?
Quando guardi l'origine della the_date()
funzione, noterai due globi:
global $currentday, $previousday;
E poi c'è una regola se c'è una data da visualizzare ... o no. Il controllo è simile a quello fatto con is_new_day()
:
if ( $currentday != $previousday ) {
// show date
// Set global
$previousday = $currentday;
}
// else
return null;
Come puoi vedere, $previousday
viene immediatamente impostato su$currentday;
. Quindi viene echo una volta. Subito dopo, entrambi i giorni sono uguali e il controllo fallirà. Questo è il motivo per cui il tuo primo post lo mostra, ma gli altri non lo mostrano.
Perché lo mostra?
Se ti chiedi perché poi mostra più di una data, dopo che il globale viene euqalizzato, allora dovrai dare un'occhiatasetup_postdata()
. Questa funzione viene chiamata da the_post();
ed è responsabile per l'impostazione di tutto per un singolo post nel ciclo.
if ( have_posts() )
{
while ( have_posts() )
{
the_post(); # <-- Calls setup_postdata( $post );
// your loop stuff here
}
}
Gli interni di setup_postdata()
sono abbastanza facili da capire (almeno su ciò che i globali vengono impostati):
$currentday = mysql2date('d.m.y', $post->post_date, false);
$currentmonth = mysql2date('m', $post->post_date, false);
Quindi la parte mobile è $previousday
contro la quale il $currentday
globale viene impostato e verificato. E a meno che non ci sia un nuovo giorno , the_date()
non verrà visualizzato nulla.
Basta impostare i tuoi post su giorni totalmente diversi e all'improvviso vedrai apparire la data su ogni post.
Qual è l'idea alla base?
In realtà l'idea è piuttosto semplice e presente dalla v0.7.1 - almeno questo è ciò che afferma phpDocBlock: Perché ti piacerebbe visualizzare la data per ogni post in un archivio? Un archivio è simile al seguente:
+--------------+
| 28.10.2014 |
+--------------+
| Post Title A |
| Post Title B |
+--------------+
| 29.10.2014 |
+--------------+
| Post Title C |
| Post Title D |
+--------------+
Non sei d'accordo con quello? Bene, allora stai semplicemente usando una funzione che doveva essere qualcosa di totalmente diverso.
Perché get_the_date()
funziona e come usarlo nel modo giusto
Non è influenzato dall'if / else nella the_date()
funzione (controllo globale). Inoltre non ha il filtro. Come risolverlo? Semplice:
echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );
Ciò aggiunge eventuali callback associati al the_date
filtro all'output personalizzato. Utilizza anche l'impostazione date_format
dell'opzione predefinita come predefinita, che viene utilizzata anche da the_date()
. E evita qualsiasi valore before
e after
- di nuovo, esattamente come la the_date()
funzione.