La publicación no muestra la fecha si hay otra publicación con la misma fecha

14

Tengo el tipo de publicación personalizada "prensa". e hizo una plantilla de página de las consultas de ese tipo. Las publicaciones deben mostrar su fecha de publicación, pero si hay más de una publicación con la misma fecha, solo la primera publicación muestra la fecha y las demás no. ¿Hay alguna forma de mostrar la fecha de cada publicación?

<?phpget_header();?><?php$wp_query=newWP_Query();$wp_query->query('post_type=press&showposts=100');while($wp_query->have_posts()):$wp_query->the_post();?><divid="press">
<div class="press-item cf">
<div class="press-img"><a href="<?php the_field('link'); ?>"><?php the_post_thumbnail('medium');?></a> </div>
<div class="press-content">
<div class="press-title"><a href="<?php the_field('link'); ?>"><?php echo get_the_title(); ?></a> </div>
<div class="press-excerpt"><?php the_excerpt(); ?> </div>
<div class="press-date"><?php the_date(); ?></div>
</div>
</div>
</div>
<?php endwhile;  ?>
<?php get_footer(); ?>
    
pregunta Jaeeun Lee 28.10.2014 - 19:50

5 respuestas

33

Enfrenté un problema similar en el pasado porque modifiqué mi función de fecha. Y luego las publicaciones mostraban la fecha si solo cada publicación tiene una fecha diferente, de lo contrario, se devolvería en blanco.

Intenta agregar <?php echo get_the_date(); ?> en su lugar.

    
respondido por el Robert hue 28.10.2014 - 20:03
22

¿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 .

    
respondido por el kaiser 28.10.2014 - 21:44
10

No uses the_date() , en lugar usa the_time() .

the_date devuelve solo la fecha, the_time devuelve la fecha + la hora. No sé la razón por la que wordpress no devolverá más de una fecha cuando se usa the_date en un bucle. Pero tiene que ver con el hecho de que el valor es el mismo. Si utiliza the_time , el valor nunca es el mismo, por lo tanto, siempre devuelve el valor. Así que puedes imprimir algo como <?php the_time('F j, Y'); ?>

Este enlace del códice explica cómo funciona la fecha mucho mejor que yo.

    
respondido por el gdaniel 28.10.2014 - 20:01
1

Brute force it.

<?php the_time('F j, Y'); ?> - <?php the_time(); ?>

Trabajó para mí, muestra la fecha completa, la hora de cada publicación, independientemente de si es la misma fecha o no.

    
respondido por el Sheba Tech 24.12.2016 - 00:55
0

Solo aparece una vez porque así es como funcionaría un diario. Mostraría la fecha en la parte superior y escribiría sus entradas debajo de ella. Utilizo este código para mostrar las fechas de cada publicación usando the_time.

<?php the_time(get_option('date_format')); ?>

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

    
respondido por el Jonny Jordan 09.04.2017 - 13:13

Lea otras preguntas en las etiquetas