¿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.
No use
the_date()
, en su lugar usethe_time()
.the_date devuelve solo la fecha, the_time devuelve la fecha + la hora. No sé la razón por la cual WordPress no devolverá más de una fecha cuando
the_date
se usa en un bucle. Pero tiene que ver con el hecho de que el valor es el mismo. Si utilizathe_time
el valor nunca es el mismo, por lo tanto, siempre devuelve el valor. Entonces puedes imprimir algo como<?php the_time('F j, Y'); ?>
Este enlace del códice explica cómo the_date funciona mucho mejor que yo.
fuente
Bruto lo fuerza.
Trabajó para mí, muestra la fecha completa, la hora de cada publicación, independientemente de si es la misma fecha o no.
fuente
Solo aparece una vez porque así es como funcionaría un diario. Mostraría la fecha en la parte superior y usted escribiría sus entradas debajo de ella. Utilizo este código para mostrar las fechas de cada publicación usando the_time.
Para obtener más información, escribí un tutorial al respecto aquí: ¿Por qué la función the_date () en WordPress solo aparece una vez en la primera publicación?
fuente