¿Cómo obtener la fecha de publicación de una entrada fuera del loop?
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?

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.

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

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

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.

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

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?

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.

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.

@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 - mira http://wordpress.stackexchange.com/questions/95769/get-date-of-last-update-outside-of-loop/115044#115044

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

@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

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!

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] =>
)

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í?

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