Por que isso não mostra?
Quando você olha a fonte da função the_date()
, você notará duas globais:
global $currentday, $previousday;
E então há uma regra se houver uma data para exibir ... ou não. O cheque é semelhante ao que foi feito 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;
. Então, isso fica ecoado uma vez. Logo depois disso, os dois dias são os mesmos e o cheque falhará. Essa é a razão pela qual sua primeira postagem a exibe, mas as outras não a mostram.
Por que isso mostra?
Se você se perguntar por que ele mostra mais de uma data, depois que o global é eqalizado, você terá que dê uma olhada em setup_postdata()
. Essa função é chamada por the_post();
e é responsável por configurar tudo para um único post no loop.
if ( have_posts() )
{
while ( have_posts() )
{
the_post(); # <-- Calls setup_postdata( $post );
// your loop stuff here
}
}
Os componentes internos de setup_postdata()
são muito fáceis de entender (pelo menos para o que os globals configuram):
$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 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 é isso que o phpDocBlock declara: 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 usar o caminho correto
Não é afetado pelo if / else na função the_date()
(a verificação global). Também não tem o filtro. Como consertar isso? Simples:
echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );
Isso adiciona todos os retornos de chamada anexados ao filtro the_date
à sua saída personalizada. Ele também usa a configuração padrão date_format
como padrão - que também é usada por the_date()
. E evita os valores before
e after
- mais uma vez, exatamente como a função the_date()
.