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.
N'utilisez pas, utilisez
the_date()
plutôtthe_time()
.the_date renvoie uniquement la date, the_time renvoie la date + l'heure. Je ne connais pas la raison pour laquelle wordpress ne retournera pas plus d'une date lorsqu'il
the_date
est utilisé dans une boucle. Mais cela a à voir avec le fait que la valeur est la même. Si vous utilisezthe_time
la valeur n'est jamais la même, elle renvoie donc toujours la valeur. Vous pouvez donc imprimer quelque chose comme<?php the_time('F j, Y'); ?>
Ce lien du codex, explique comment the_date fonctionne beaucoup mieux que moi.
la source
Brute le force.
A fonctionné pour moi, affiche la date complète, l'heure pour chaque message, que ce soit la même date ou non.
la source
Il n'apparaît qu'une seule fois parce que c'est ainsi qu'un journal fonctionnerait. Il afficherait la date en haut et vous écririez vos entrées en dessous. J'utilise ce code pour afficher les dates de chaque publication en utilisant the_time.
Pour plus d'informations, j'ai écrit un tutoriel à ce sujet ici: Pourquoi la fonction the_date () dans WordPress n'apparaît qu'une seule fois sur le premier message
la source