¿Por qué no se muestra?
Cuando mire la fuente de la función the_date()
, notará dos globales:
global $currentday, $previousday;
Y luego hay una regla si hay una fecha para mostrar ... o no. El cheque es similar al que se hizo con :
if ( $currentday != $previousday ) {
// show date
// Set global
$previousday = $currentday;
}
// else
return null;
Como puede ver, is_new_day()
se establece instantáneamente en $previousday
. Así que 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 que tu primera publicación lo muestra, pero las otras no lo muestran.
¿Por qué se muestra?
Si se pregunta por qué muestra más de una fecha, después de que se globalice la globalización, entonces tendrá que eche un vistazo a $currentday;
. Esta función es llamada por setup_postdata()
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
}
}
Las partes internas de the_post();
son bastante fáciles de entender (al menos de lo que se establecen los globales):
$currentday = mysql2date('d.m.y', $post->post_date, false);
$currentmonth = mysql2date('m', $post->post_date, false);
Por lo tanto, la parte móvil es setup_postdata()
contra la cual se establece y verifica $previousday
global. Y a menos que haya nuevo día , $currentday
no mostrará nada.
Simplemente configura tus publicaciones en días totalmente diferentes y de repente verás 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 utilizando una función que pretendía ser algo totalmente diferente.
¿Por qué funciona the_date()
y cómo usarlo de la forma correcta
No se ve afectado por if / else en la función get_the_date()
(la comprobación global). También no tiene el filtro. ¿Cómo arreglar eso? Simple:
echo apply_filters( 'the_date', get_the_date(), get_option( 'date_format' ), '', '' );
Esto agrega cualquier devolución de llamada adjunta al filtro the_date()
a su salida personalizada. También utiliza la configuración predeterminada de la opción the_date
como predeterminada, que también es utilizada por date_format
. Y evita cualquier valor de the_date()
y before
- de nuevo, exactamente como la función after
.