Le message ne montre pas la date s'il existe un autre message avec la même date

14

J'ai un type de message personnalisé "presse". et fait un modèle de page les requêtes messages de ce type. Les publications sont supposées afficher leur date de publication, mais s'il y a plus d'une publication avec la même date, seule la première publication affiche la date et les autres non. Existe-t-il un moyen de montrer la date de chaque message?

<?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(); ?>
    
posée Jaeeun Lee 28.10.2014 - 19:50

5 réponses

33

J'ai déjà eu à faire face au même problème dans le passé, car j'ai modifié ma fonction de date. Ensuite, les publications affichaient la date si seule chaque publication a une date différente, sinon elle est retournée vierge.

Essayez d'ajouter <?php echo get_the_date(); ?> à la place.

    
réponse donnée Robert hue 28.10.2014 - 20:03
22

Pourquoi cela ne s'affiche-t-il pas?

Lorsque vous examinez la source de la fonction the_date() , vous remarquerez deux éléments globaux:

global $currentday, $previousday;

Et puis il y a une règle s'il y a une date à afficher ... ou pas. La vérification est similaire à celle effectuée avec is_new_day() :

if ( $currentday != $previousday ) {

    // show date

    // Set global
    $previousday = $currentday;
}
// else
return null;

Comme vous pouvez le constater, le $previousday est instantanément paramétré sur $currentday; . Donc, il se fait écho une fois. Juste après, 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 l’affiche pas.

Pourquoi est-ce que cela se voit?

Si vous vous demandez pourquoi il affiche alors plus d'une date, une fois le global obtenu, vous devrez alors jetez un coup d'oeil à setup_postdata() . Cette fonction est appelée par the_post(); et est chargée de tout configurer pour un seul post dans la boucle.

if ( have_posts() )
{
    while ( have_posts() )
    {
        the_post(); # <-- Calls setup_postdata( $post );

        // your loop stuff here
    }
}

Les éléments internes de setup_postdata() sont assez faciles à comprendre (du moins à ce que les globals sont définis):

$currentday = mysql2date('d.m.y', $post->post_date, false);
$currentmonth = mysql2date('m', $post->post_date, false);

La pièce mobile est donc $previousday par rapport à laquelle le $currentday global est défini et vérifié. Et à moins que le nouveau jour ne soit présent, the_date() n’affiche rien.

Il vous suffit de définir vos messages sur des jours totalement différents et tout à coup, la date apparaît sur chaque message.

Quelle est l'idée derrière cela?

En fait, l'idée est assez simple et présente depuis la v0.7.1 - du moins, c'est ce que déclare 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? Dans ce cas, vous utilisez simplement une fonction destinée à être quelque chose de totalement différent.

Pourquoi get_the_date() fonctionne-t-il et comment l'utiliser de la droite

Il n’est pas affecté par le if / else dans la fonction the_date() (la vérification des globales). De même, pas n’a le filtre. Comment résoudre ce problème? Simple:

echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );

Ceci ajoute les rappels attachés au filtre the_date à votre sortie personnalisée. Il utilise également le paramètre d'option par défaut date_format - qui est également utilisé par the_date() . Et cela évite les valeurs before et after - là encore, exactement comme la fonction the_date() .

    
réponse donnée kaiser 28.10.2014 - 21:44
10

N'utilisez pas the_date() , utilisez plutôt the_time() .

the_date ne renvoie que la date, the_time renvoie la date + l'heure. Je ne connais pas la raison pour laquelle wordpress ne renvoie pas plus d'une date lorsque the_date est utilisé dans une boucle. Mais cela a à voir avec le fait que la valeur est la même. Si vous utilisez the_time , la valeur n'est jamais identique, elle retourne donc toujours la valeur. Donc, vous pouvez imprimer quelque chose comme <?php the_time('F j, Y'); ?>

Ce lien du codex explique en détail comment the_date fonctionne mieux que moi.

    
réponse donnée gdaniel 28.10.2014 - 20:01
1

Brute le force.

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

Travaillé pour moi, affiche la date complète, l'heure de chaque publication, que cette date soit identique ou non.

    
réponse donnée Sheba Tech 24.12.2016 - 00:55
0

Il n’apparaît qu’une fois, car c’est ainsi que se comporterait un journal. 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.

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

Pour plus d'informations, j'ai rédigé un didacticiel à ce sujet: Pourquoi la fonction the_date () dans WordPress uniquement affiché une fois sur le premier message

    
réponse donnée Jonny Jordan 09.04.2017 - 13:13

Lire d'autres questions sur les étiquettes