Por que isso não aparece?
Quando você olha para a fonte da the_date()
função, notará duas globais:
global $currentday, $previousday;
E então há uma regra se há uma data para exibir ... ou não. A verificação é semelhante à feita com is_new_day()
:
if ( $currentday != $previousday ) {
// show date
// Set global
$previousday = $currentday;
}
// else
return null;
Como você pode ver, o $previousday
instantaneamente é definido como $currentday;
. Por isso, é ecoado uma vez. Logo depois, os dois dias são os mesmos e a verificação falhará. Essa é a razão pela qual sua primeira postagem a exibe, mas as outras não.
Por que isso mostra?
Se você se perguntar por que ele mostra mais de uma data, depois que o global for igualado, será necessário dar uma olhadasetup_postdata()
. Essa função é chamada the_post();
e é responsável por configurar tudo para uma única postagem no loop.
if ( have_posts() )
{
while ( have_posts() )
{
the_post(); # <-- Calls setup_postdata( $post );
// your loop stuff here
}
}
Os internos de setup_postdata()
são bastante fáceis de entender (pelo menos o que os globais definem):
$currentday = mysql2date('d.m.y', $post->post_date, false);
$currentmonth = mysql2date('m', $post->post_date, false);
Portanto, a parte móvel é $previousday
contra a qual o $currentday
global é definido e verificado. E a menos que haja um novo dia , the_date()
não exibirá nada.
Basta definir suas postagens para dias totalmente diferentes e, de repente, você verá a data em cada postagem.
Qual é a ideia por trás disso?
Na verdade, a ideia é bem simples e presente desde a v0.7.1 - pelo menos é o que o phpDocBlock afirma: Por que você gostaria de exibir a data de cada postagem em um arquivo? Um arquivo é assim:
+--------------+
| 28.10.2014 |
+--------------+
| Post Title A |
| Post Title B |
+--------------+
| 29.10.2014 |
+--------------+
| Post Title C |
| Post Title D |
+--------------+
Você não concorda com isso? Bem, então você está simplesmente usando uma função que deveria ser algo totalmente diferente.
Por que get_the_date()
funciona e como usá-lo da maneira certa
Não é afetado pelo if / else na the_date()
função (a verificação global). Também não possui o filtro. Como consertar isso? Simples:
echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );
Isso adiciona quaisquer retornos de chamada anexados ao the_date
filtro à sua saída personalizada. Ele também usa a date_format
configuração de opção padrão como padrão - que também é usada the_date()
. E evita quaisquer valores before
e after
- novamente, exatamente como a the_date()
função.