web-dev-qa-db-fra.com

Différences d'utilisation des fonctions the_time et the_date

J'ai quelques doutes sur le fonctionnement des fonctions WordPress the_date () définies dans general-template.php

Dans une page, je montre les archives de messages en utilisant cet extrait de code dans une boucle:

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>                              

    <header>

        <h3 class="entry-title">
                <a href="<?php the_permalink(); ?>" 
                   title="<?php printf(__('Permalink to %s', 'your-theme'), the_title_attribute('echo=0')); ?>"
                   rel="bookmark"><?php the_date("d/m/Y");  echo " - "; the_title(); ?>
                </a>

        </h3>

    </header>

</article>  <!-- #post-<?php the_ID(); ?> -->

Le problème est que pour certaines publications, la fonction the_date () me donne la date de publication et non pour les autres publications.

Je joins un screnshot de ce que j'obtiens:

enter image description here

Comme vous pouvez le voir, certains articles sont présentés sous la forme suivante: DATE - POST TITLE , mais d’autres articles sont affichés sous la forme . sans la date avant le titre du post.

Cela me semble très étrange car tous les articles ont une date de publication.

J'ai donc essayé d'utiliser le débogueur et de voir ce qui se passe lorsque la fonction the_date () a le code suivant:

function the_date( $d = '', $before = '', $after = '', $echo = true ) {
    global $currentday, $previousday;

    if ( $currentday != $previousday ) {
        $the_date = $before . get_the_date( $d ) . $after;
        $previousday = $currentday;

        /**
         * Filter the date a post was published for display.
         *
         * @since 0.71
         *
         * @param string $the_date The formatted date string.
         * @param string $d        PHP date format. Defaults to 'date_format' option
         *                         if not specified.
         * @param string $before   HTML output before the date.
         * @param string $after    HTML output after the date.
         */
        $the_date = apply_filters( 'the_date', $the_date, $d, $before, $after );

        if ( $echo )
            echo $the_date;
        else
            return $the_date;
    }

    return null;
}

et il contient cette déclaration conditionnelle:

if ( $currentday != $previousday ) {

et je vois que pour certains posts, la valeur de $ currentday et de $ previousday est identique, de sorte que la fonction retourne null

En lisant également la documentation de funcion, je peux trouver:

/**
 * Display or Retrieve the date the current post was written (once per date)
 *
 * Will only output the date if the current post's date is different from the
 * previous one output.
 *
 * i.e. Only one date listing will show per day worth of posts shown in the loop, even if the
 * function is called several times for each post.
 *
 * HTML output can be filtered with 'the_date'.
 * Date string output can be filtered with 'get_the_date'.

Alors, que représente exactement ces 2 variables? et pourquoi s’ils sont identiques, la date n’est pas renvoyée? Comment puis-je résoudre ce problème et afficher la date?

1
AndreaNobili

Pour des raisons historiques de bloggy, the_date dans WordPress n’affiche pas la même date deux fois de suite. Ceci est à des fins de regroupement.

Le correctif est simple: utilisez plutôt the_time. Il se comporte exactement comme the_date, mais sans la logique historique interne. Pas besoin de réécrire un code compliqué, il suffit de changer trois caractères. :)

Remarque: the_time ne contient pas les paramètres avant, après et écho, mais ce n'est pas grave car vous n'en avez vraiment pas besoin. Cela fait toujours écho, et vous pouvez facilement définir les paramètres avant et après qui l’entourent. Comme je l'ai dit, le comportement opérationnel de the_date a des raisons historiques qui n'ont pas de sens, sauf dans des circonstances spécifiques qui ne s'appliquent généralement plus.

2
Otto

Comme il le dit bien, il y a sa documentation en ligne - la fonction est uniquement destinée à afficher le résultat "une fois par date". Dans une boucle chronologique typique de messages, il "s'effondrera" pour les messages publiés le même jour. Dans une boucle moins typique, cela peut conduire à des sorties assez bizarres.

Si vous creusez assez loin et suffisamment profondément dans l'historique du contrôle de version, vous pourrez peut-être digérer son raisonnement.

D'un point de vue pratique, vous devriez simplement regarder dans la source et retirer que get_the_date() vous donne le même contenu sans toute la logique "une fois par".

1
Rarst