Diferențe la utilizarea funcțiilor the_time și the_date (WordPress, Php, Funcții, Dezvoltarea Temei)

AndreaNobili a intrebat.

Am unele îndoieli cu privire la modul în care funcționează WordPress the_date() definite în general-template.php

Într-o pagină arăt arhiva postărilor folosind acest fragment de cod într-o buclă:

<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(); ?> -->

Problema este că pentru unele postări nu se mai poate verifica the_date() îmi dă data postării, iar pentru alte postări nu.

Atașez un screnshot cu ceea ce obțin:

După cum puteți vedea, unele postări sunt afișate ca fiind ceva de genul: DATA – TITLUL POSTULUI dar alte mesaje sunt afișate ca TITLUL POSTULUI fără data înainte de titlul postului.

Acest lucru mi se pare foarte ciudat, deoarece toate postările au o dată de publicare.

Așa că am încercat să folosesc debuggerul și să văd ce se întâmplă când se afișează the_date() are acest cod:

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;
}

și conține acest statment condițional:

if ( $currentday != $previousday ) {

și am văzut că pentru unele postări valoarea lui $currentday și de $previousday este aceeași, astfel încât funcția return null

De asemenea, citind documentația funcției pot găsi:

/**
 * 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'.

Deci, ce anume reprezintă aceste 2 variabile? și de ce, dacă sunt identice, data nu este returnată? Cum pot rezolva această problemă și să afișez data?

2 răspunsuri
Otto

Din motive istorice de bloggy, the_date în WordPress nu va afișa aceeași dată de două ori la rând. Acest lucru este pentru scopuri de grupare.

Soluția este simplă: utilizați the_time în loc. Se comportă exact la fel ca the_date, , dar fără logica istorică internă. De asemenea, nu este nevoie să rescrieți niciun cod complicat, doar schimbați trei caractere. 🙂

Notă: the_time lipsește parametrii before, after și echo, dar este în regulă, deoarece chiar nu aveți nevoie de ei. Întotdeauna se face eco, iar parametrii before și after îi puteți pune destul de ușor în jurul lui. După cum am spus, există motive istorice pentru comportamentul operațional al lui the_date, , care nu au sens decât în circumstanțe specifice care, în general, nu se mai aplică.

Rarst

După cum scrie chiar acolo este documentația sa inline – funcția este menită să emită rezultatul doar „o dată pe dată”. În bucla cronologică tipică a postărilor se va „prăbuși” pentru postările făcute în aceeași zi. Într-o buclă mai puțin tipică ar putea duce la ieșiri destul de bizare.

Dacă săpați suficient de mult și de adânc în istoricul controlului versiunilor, s-ar putea să găsiți o explicație pentru aceasta.

Din punct de vedere practic, ar trebui doar să vă uitați în sursă și să luați în considerare că get_the_date() obține aceleași lucruri fără toată logica „o dată pe”.