¿Por qué no se muestra?
Cuando observa la fuente de la the_date()
función, notará dos globales:
global $currentday, $previousday;
Y luego hay una regla si hay una fecha para mostrar ... o no. La verificación es similar a la realizada con is_new_day()
:
if ( $currentday != $previousday ) {
// show date
// Set global
$previousday = $currentday;
}
// else
return null;
Como puede ver, el $previousday
instante se establece en $currentday;
. Entonces se hace eco una vez. Justo después de eso, ambos días son iguales y la verificación fallará. Esa es la razón por la cual tu primera publicación lo muestra, pero las otras no lo muestran.
¿Por qué se nota?
Si te preguntas por qué muestra más de una fecha, después de que el global se eucalice, tendrás que echarle un vistazosetup_postdata()
. Esta función se llama the_post();
y es responsable de configurar todo para una sola publicación en el bucle.
if ( have_posts() )
{
while ( have_posts() )
{
the_post(); # <-- Calls setup_postdata( $post );
// your loop stuff here
}
}
Los aspectos internos de setup_postdata()
son bastante fáciles de entender (al menos para lo que se establecen los globales):
$currentday = mysql2date('d.m.y', $post->post_date, false);
$currentmonth = mysql2date('m', $post->post_date, false);
Entonces, la parte móvil es $previousday
contra la cual $currentday
se establece y comprueba lo global. Y a menos que haya un nuevo día , the_date()
no mostrará nada.
Simplemente configure sus publicaciones en días totalmente diferentes y de repente verá que la fecha aparece en cada publicación.
¿Cuál es la idea detrás de eso?
En realidad, la idea es bastante simple y está presente desde v0.7.1, al menos esto es lo que dice phpDocBlock: ¿Por qué le gustaría mostrar la fecha de cada publicación en un archivo? Un archivo se ve así:
+--------------+
| 28.10.2014 |
+--------------+
| Post Title A |
| Post Title B |
+--------------+
| 29.10.2014 |
+--------------+
| Post Title C |
| Post Title D |
+--------------+
¿No estás de acuerdo con eso? Bueno, entonces simplemente estás usando una función que pretendía ser algo totalmente diferente.
¿Por qué get_the_date()
funciona y cómo usarlo de la manera correcta?
No se ve afectado por el if / else en la the_date()
función (la comprobación global). Tampoco no tiene el filtro. ¿Cómo arreglar eso? Sencillo:
echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );
Esto agrega cualquier devolución de llamada adjunta al the_date
filtro a su salida personalizada. También utiliza la configuración de date_format
opción predeterminada como predeterminada, que también utiliza the_date()
. Y evita cualquiera before
y after
valores, de nuevo, exactamente como la the_date()
función.