A postagem não mostra a data se houver outra postagem com a mesma data

14

Tenho um tipo de mensagem personalizada "prima". e fez um modelo de página as postagens de consultas desse tipo. As postagens devem mostrar a data publicada, mas se houver mais de uma postagem com a mesma data, somente a primeira postagem mostrará a data e as outras não. Existe uma maneira de mostrar a data de cada postagem?

<?phpget_header();?><?php$wp_query=newWP_Query();$wp_query->query('post_type=press&showposts=100');while($wp_query->have_posts()):$wp_query->the_post();?><divid="press">
<div class="press-item cf">
<div class="press-img"><a href="<?php the_field('link'); ?>"><?php the_post_thumbnail('medium');?></a> </div>
<div class="press-content">
<div class="press-title"><a href="<?php the_field('link'); ?>"><?php echo get_the_title(); ?></a> </div>
<div class="press-excerpt"><?php the_excerpt(); ?> </div>
<div class="press-date"><?php the_date(); ?></div>
</div>
</div>
</div>
<?php endwhile;  ?>
<?php get_footer(); ?>
    
por Jaeeun Lee 28.10.2014 / 19:50

5 respostas

33

Eu enfrentei um problema semelhante no passado porque modifiquei minha função de data. E, em seguida, as postagens exibiam a data se apenas cada postagem tivesse data diferente, caso contrário, ela retornaria em branco.

Tente adicionar <?php echo get_the_date(); ?> em vez disso.

    
por Robert hue 28.10.2014 / 20:03
22

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() .

    
por kaiser 28.10.2014 / 21:44
10

Não use the_date() , em vez disso, use the_time() .

the_date retorna apenas a data, the_time retorna a data + a hora. Eu não sei o motivo pelo qual o wordpress não retornará mais de uma data quando the_date é usado em um loop. Mas isso tem a ver com o fato de que o valor é o mesmo. Se você usar the_time , o valor nunca será o mesmo, portanto, sempre retornará o valor. Então você pode imprimir algo como <?php the_time('F j, Y'); ?>

Este link do códice, explica como o the_date funciona muito melhor do que eu.

    
por gdaniel 28.10.2014 / 20:01
1

Força bruta.

<?php the_time('F j, Y'); ?> - <?php the_time(); ?>

Trabalhou para mim, exibe data e hora completas para cada postagem, independentemente de ser a mesma data ou não.

    
por Sheba Tech 24.12.2016 / 00:55
0

Ele só aparece uma vez porque é assim que um diário funcionaria. Mostraria a data no topo e você escreveria suas entradas abaixo dela. Eu uso esse código para exibir as datas de cada post usando the_time.

<?php the_time(get_option('date_format')); ?>

Para mais informações eu escrevi um tutorial sobre isso aqui: Why the_date () Function no WordPress só aparece uma vez no primeiro post

    
por Jonny Jordan 09.04.2017 / 13:13

Tags