Pourquoi ça ne se voit pas?
Lorsque vous regardez la source de la the_date()
fonction, vous remarquerez alors deux globales:
global $currentday, $previousday;
Et puis il y a une règle s'il y a une date à afficher ... ou pas. Le contrôle est similaire à celui effectué avec is_new_day()
:
if ( $currentday != $previousday ) {
// show date
// Set global
$previousday = $currentday;
}
// else
return null;
Comme vous pouvez le voir, le $previousday
se règle instantanément sur $currentday;
. Il est donc répété une fois. Juste après cela, les deux jours sont identiques et la vérification échouera. C'est la raison pour laquelle votre premier message l'affiche, mais les autres ne le montrent pas.
Pourquoi ça se voit?
Si vous vous demandez pourquoi il affiche alors plus d'une date, après que le global se soit eucalisé, alors vous devrez y jeter un œilsetup_postdata()
. Cette fonction est appelée par the_post();
et est responsable de tout configurer pour un seul poste dans la boucle.
if ( have_posts() )
{
while ( have_posts() )
{
the_post(); # <-- Calls setup_postdata( $post );
// your loop stuff here
}
}
Les internes de setup_postdata()
sont assez faciles à comprendre (du moins à ce que les globaux ont défini):
$currentday = mysql2date('d.m.y', $post->post_date, false);
$currentmonth = mysql2date('m', $post->post_date, false);
Ainsi, la partie mobile est par $previousday
rapport à laquelle le $currentday
global est défini et vérifié. Et à moins qu'il n'y ait un nouveau jour , the_date()
n'affichera rien.
Réglez simplement vos messages sur des jours totalement différents et tout à coup, vous verrez la date apparaître sur chaque message.
Quelle est l'idée derrière ça?
En fait, l'idée est assez simple et présente depuis la v0.7.1 - c'est du moins ce que dit le phpDocBlock: Pourquoi voudriez-vous afficher la date de chaque publication dans une archive? Une archive ressemble à ceci:
+--------------+
| 28.10.2014 |
+--------------+
| Post Title A |
| Post Title B |
+--------------+
| 29.10.2014 |
+--------------+
| Post Title C |
| Post Title D |
+--------------+
Vous n'êtes pas d'accord avec ça? Eh bien, vous utilisez simplement une fonction qui était censée être quelque chose de totalement différent.
Pourquoi le get_the_date()
travail et comment utiliser la bonne façon
Il n'est pas affecté par le if / else dans la the_date()
fonction (la vérification globale). Il n'a pas non plus de filtre. Comment y remédier? Facile:
echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );
Cela ajoute tous les rappels attachés au the_date
filtre à votre sortie personnalisée. Il utilise également le date_format
paramètre d'option par défaut par défaut - qui est également utilisé par the_date()
. Et cela évite tout before
et les after
valeurs - encore une fois, exactement comme la the_date()
fonction.