¿Cómo obtener la fecha de publicación de una entrada fuera del loop?

19 jun 2012, 14:43:39
Vistas: 60.1K
Votos: 11

Necesito obtener la fecha de publicación de la entrada para hacer que la entrada expire automáticamente. El problema es que no puedo obtener la fecha de publicación correcta.

Aquí está mi código:

 global $wpdb;

$post_ids = $wpdb->get_results( "SELECT ID FROM $wpdb->posts WHERE post_status ='publish'" );

foreach($post_ids as $id){

      $postdate = get_the_date("Y-m-d",$id ); //aquí es donde no lo puedo resolver
       .......
      ......etc
}

Cuando hago echo de $postdate, muestra una fecha incorrecta. No es la fecha que existe en la tabla wp_posts.

¿Cómo puedo obtener la fecha correctamente?

0
Todas las respuestas a la pregunta 4
14
21

get_the_date debe usarse dentro del Loop. Para fuera del Loop usa get_the_time.

$posts = get_posts(array('numberposts'=>-1)); //Obtener todos los posts publicados
foreach ($posts as $post){
    echo get_the_time('Y-m-d', $post->ID); //Muestra la fecha en formato Y-m-d.
}

Considera reemplazar 'Y-m-d' en este ejemplo con get_option('date_format') ya que esto mostrará la fecha según tu configuración de formato de fecha en wp-admin.

19 jun 2012 15:13:02
Comentarios

También probé con get_the_time, pero aún me da la fecha incorrecta.

dev-jim dev-jim
19 jun 2012 15:15:19

¿Y le pasaste el ID del post? get_the_time es la función correcta para usar aquí.

Stephen Harris Stephen Harris
19 jun 2012 15:20:01

Además - no deberías estar usando una consulta SQL personalizada aquí. Usa get_posts y luego si quieres extraer solo los IDs, usa wp_list_pluck

Stephen Harris Stephen Harris
19 jun 2012 15:22:00

Estoy haciendo algo para actualizar el estado de la publicación (post_status) basado en la fecha de publicación, ¿hay alguna otra forma de actualizar el estado? Hasta ahora, la consulta SQL me parece la forma más fácil.

dev-jim dev-jim
19 jun 2012 17:04:54

Mira las ediciones - casi nunca deberías necesitar consultar la base de datos directamente.

Stephen Harris Stephen Harris
19 jun 2012 17:27:59

Entiendo tu punto. Lo probé y funciona perfectamente. Pero me gustaría saber ¿por qué no debería consultar la base de datos directamente? ¿Por seguridad?

dev-jim dev-jim
19 jun 2012 17:50:11

Seguridad (en cierto modo), rendimiento (probablemente) pero principalmente simplicidad de código y compatibilidad futura - es decir, usar la API proporcionada (get_post) en este caso.

Stephen Harris Stephen Harris
19 jun 2012 18:01:45

Gracias Stephen, no sabía que podía pasar un ID> Al usar get_posts no hay forma de mostrar la fecha de publicación sin esto.

Diana Diana
29 jun 2013 07:47:50

@StephenHarris mientras que esta función obtiene la fecha en que se creó la publicación, ¿es posible obtener la fecha/hora de modificación fuera del loop?

Anagio Anagio
21 sept 2013 02:09:29

Según el Codex, la etiqueta get_the_time debe usarse dentro del Loop. http://codex.wordpress.org/Function_Reference/get_the_time

Maor Barazany Maor Barazany
15 ene 2014 00:29:28

@MaorBarazany, parece que el codex está equivocado, mira el código fuente: https://core.trac.wordpress.org/browser/tags/3.8/src/wp-includes/general-template.php#L1497

Stephen Harris Stephen Harris
15 ene 2014 01:23:58

Vinculaste a get_post_time en lugar de get_the_time, lo cual es bastante confuso. Logran lo mismo pero tienen diferentes argumentos. ¿Hay alguna posibilidad de que puedas corregir el enlace? ¡Gracias!

David Hobs David Hobs
13 jun 2014 02:30:24

@DavidHobs Corregido :)

Stephen Harris Stephen Harris
13 jun 2014 17:31:10
Mostrar los 9 comentarios restantes
0

Puedes usar get_post() o get_post_field() para esto, ambas funcionan fuera del bucle (loop).

$post_object = get_post($id);
$post_date = date( 'F jS, Y', strtotime( $post_object->post_date ) );

Una lista completa de valores devueltos por get_post:

WP_Post Object
(
    [ID] =>
    [post_author] =>
    [post_date] => 
    [post_date_gmt] => 
    [post_content] => 
    [post_title] => 
    [post_excerpt] => 
    [post_status] =>
    [comment_status] =>
    [ping_status] => 
    [post_password] => 
    [post_name] =>
    [to_ping] => 
    [pinged] => 
    [post_modified] => 
    [post_modified_gmt] =>
    [post_content_filtered] => 
    [post_parent] => 
    [guid] => 
    [menu_order] =>
    [post_type] =>
    [post_mime_type] => 
    [comment_count] =>
    [filter] =>
)
12 oct 2018 03:03:26
0

Algunas soluciones modernas

Solución Uno

<?php echo get_the_date('j F Y', get_the_ID()) ?>

Solución Dos

<?php the_time(get_option('date_format')) ?>
26 mar 2018 22:25:38
4
-2

prueba así

$getPosts = $wpdb->get_results( 
"
    SELECT ID, post_date, post_title
    FROM $wpdb->posts
    WHERE post_status = 'publish' 
        AND post_type = 'post'
        ORDER BY ID ASC
    "
);

foreach ( $getPosts as $myPost ) {
    $id = $myPost->post_date;
    echo $myPost->ID.' | '. $myPost->post_title.' | '. get_the_date("Y-m-d",$id ).'<br />';
}

editar

get_the_time Devuelve la hora de la entrada actual para usar en PHP. No muestra la hora. Para mostrar la hora de una entrada, usa the_time(). Esta etiqueta debe usarse dentro del Loop.

get_the_date La etiqueta de plantilla get_the_date recupera la fecha en que se escribió el $post actual. A diferencia de the_date(), esta etiqueta siempre devolverá la fecha. Modifica la salida con el filtro 'get_the_date'.

¿Me estoy perdiendo algo aquí?

19 jun 2012 15:12:02
Comentarios

Por favor, fusiona tus respuestas.

fuxia fuxia
19 jun 2012 16:17:24

¿me muestras cómo fusionar, por favor?

Dazilio Dazilio
19 jun 2012 16:29:47

Edita la primera respuesta y copia el código de la segunda en ella. Luego elimina la segunda.

fuxia fuxia
19 jun 2012 16:32:18

Probé tus códigos, y puedo obtener el valor de get_the_time, pero no de get_the_date.

dev-jim dev-jim
19 jun 2012 17:06:26