Cómo mostrar la fecha de publicación real en un borrador

3

Al mirar un borrador de publicación, get_the_date() solo parece devolver la fecha de hoy, no la fecha de publicación, incluso si he seleccionado otra fecha en la pantalla de edición de publicación.

¿Hay alguna forma de mostrar la fecha de publicación "real", la que seleccioné?

Puedo ver en la base de datos MySQL que está guardada en la columna post_date. Pero, como get_the_date, $post->post_date no lo devuelve. Si la publicación es un borrador, muestra la fecha y hora actuales.

    
pregunta supertrue 23.02.2012 - 01:56

4 respuestas

7

Sí, ya que, hasta ahora, no tiene fecha de publicación.

Podría usar $post->post_modified , que siempre será la fecha de la última modificación de los datos de la publicación.

Debug:

Intente enganchar en el filtro y volcar ambas vars:

function date_dump_callback( $date, $d )
{
    echo '<pre>'; print_r( $date ); print_r( $d ); echo '</pre>';
    return $date;
}
add_filter( 'get_the_date', 'date_dump_callback', 20, 2 );
    
respondido por el kaiser 23.02.2012 - 07:56
3

No estoy seguro de por qué está modificando los datos de esa manera cuando se muestran, pero puede usar

$post->post_date_gmt

Esto devolverá la fecha de publicación programada de la misma manera que en la base de datos, excepto que está en formato de hora GMT, por lo que es posible que deba convertir la hora a su zona horaria local primero ( esta publicación de blog puede ayudar ). De lo contrario, debería poder usarlo tal como está si solo está usando la fecha y la fecha. No es el momento, pero depende de lo que estés haciendo con él.

Editar 2/29/12:

Quería elaborar mi respuesta para hacerla más completa y darle algo que realmente puedas usar.

Tienes razón, la fecha de publicación se está almacenando en el campo post_date en la base de datos.

Por ejemplo, wordpress usa esta línea de código en wp-admin/includes/meta-boxes.php para establecer la variable que se usa para mostrar la fecha de la publicación para los borradores programados para el futuro:

$date = date_i18n( $datef, strtotime( $post->post_date ) );

Sin embargo, cuando se usa el mismo código para mostrar en el extremo delantero, devuelve la hora actual como dijiste. Creo que podemos concluir que los datos de objeto $post se están preparando de manera diferente para el extremo delantero.

De todas formas, es posible que genere la misma fecha programada que ha establecido en el administrador.

Como parece que no podemos usar $post->post_date , podemos usar $post->post_date_gmt como dije antes, el único inconveniente es que su zona horaria probablemente no sea la misma que la GMT. Así que todo lo que necesita hacer es extraer el valor GMT y convertirlo a su zona horaria.

Puedes agregar esta función a tu functions.php y llamarla donde quieras:

<?php
/**
*@param string $datef (optional) to pass the format you want for the returned date string
*@return string
*/
function get_the_real_post_date($datef = 'M j, Y @ G:i') {

    global $post;

    if ( !empty( $timezone_string = get_option( 'timezone_string' ) ) )  {

        $timezone_object = timezone_open( $timezone_string );
        $datetime_object = date_create( $post->post_date_gmt );

        $offset_sec = round( timezone_offset_get( $timezone_object, $datetime_object ) );
        // if you want $offset_hrs = round( $offset_sec / 3600 );

        return date_i18n( $datef, strtotime( $post->post_date_gmt ) + $offset_sec );

    } elseif (!empty( $offset_hrs = get_option('gmt_offset') ) ) {

        // this option shows empty for me so I believe it's only used by WP pre 3.0
        // the option stores an integer value for the time offset in hours

        $offset_sec = $offset_hrs * 3600;
        return date_i18n( $datef, strtotime( $post->post_date_gmt ) + $offset_sec );

    } else {

        return;  // shouldn't happen but...

    }
}

Por supuesto, también puede cambiar el formato de hora predeterminado que se define en la definición del parámetro si hay un formato en particular que usaría más.

Hazme saber si esto funciona para ti. Tengo curiosidad, ¿para qué estás usando la fecha?

    
respondido por el Evan Mattson 28.02.2012 - 21:08
0

Puede generar la fecha programada para una publicación borrador leyendo la base de datos utilizando la clase wpdb a través de la variable $ wpdb global proporcionada por Worpdress (consulte enlace ).

Añade esto a tus funciones.php:

// function to get scheduled date for draft post
function unpublished_draft_date(){
  global $wpdb; global $post;
  $post_id = $post->ID;
  $draft_date_array = $wpdb->get_results( 'SELECT post_date FROM wp_posts WHERE ID = '.$post_id );
  $draft_date = $draft_date_array[0]->post_date;
  return $draft_date;
}

Y esto dentro de su bucle de publicación:

echo unpublished_draft_date();

Le proporcioné el código básico para obtener la fecha que quería. Es fácil configurar la fecha si necesita e ingrese una ID de publicación en la función si no desea usar la ID de publicación actual o si desea utilizar la función fuera del bucle.

Por favor comente a continuación si necesita instrucciones más específicas.

    
respondido por el jounileander 05.06.2013 - 11:26
0
  

En mis borradores, $ post- > post_date_gmt es solo 00:00:00 - supertrue 4 de junio a las 15:08

No hay forma de editar la fecha de publicación de un borrador que aún no se ha publicado. El valor para post_date_gmt será 0000-00-00 00:00:00 hasta que se publique la publicación.

Asegúrate de que la publicación haya sido publicada al menos una vez. La visibilidad puede configurarse como privada si no desea que se publique públicamente. Una vez que se publique, puede editar la fecha y debe guardarla como valor para post_date y post_date_gmt de forma indefinida a menos que vuelva a cambiarla. Los valores post_modified y post_modified_gmt continuarán cambiando cada vez que modifiques la publicación.

He probado esto y post_date_gmt se establecerá en la fecha y hora actuales al publicar la publicación con la visibilidad establecida en privado. También puede editar la fecha en este punto y debería actualizarse.

  

Si puede modificar y guardar una fecha en la pantalla de edición de un borrador (que puede) - supertrue Feb 29 '12 at 1:36

No, no puede modificar y guardar una fecha en la pantalla de edición de un borrador. Antes de publicar un borrador, esta misma área del metabox "Publicar" en el editor de publicaciones se usa para programar una fecha para que la publicación se publique en el futuro. Por supuesto, no podrá establecer una fecha u hora pasada para la programación y la fecha futura probablemente no se configurará para post_date_gmt hasta que se publique.

    
respondido por el iyrin 05.06.2013 - 01:25

Lea otras preguntas en las etiquetas