¿Cuál es la fecha de creación de la publicación para wp_insert_post?

4

Tengo el siguiente enlace que establece un "hotness" predeterminado para una publicación. Para el contexto, hotness es un meta_value guardado en la publicación, y cambia cada vez que alguien promueve o rebaja la publicación. Uso este meta_value para ordenar las publicaciones en un '¿Qué está de moda ahora?' página.

Debido a que en el momento en que se crea la publicación en WordPress, la "puntuación" de upvotes frente a downvotes es 0. Por lo tanto, puedo omitir completamente la parte de la puntuación del cálculo de picor. Cuando se crea la publicación, solo se tiene en cuenta el tiempo de creación:

/* Hook: Add custom postmeta when a new post is created
 * Since: 8.0
 */
add_action( 'wp_insert_post', tjnz_prepare_postmeta );
function tjnz_prepare_postmeta( $post_id ) {
    if ( !wp_is_post_revision( $post_id ) ) {
        $hotness = round( ( time() - 1211380200 ) / 800000, 7 );
        add_post_meta( $post_id, '_tjnz_favorites', 0, true );
        add_post_meta( $post_id, '_tjnz_plays', 0, true );
        add_post_meta( $post_id, '_tjnz_downloads', 0, true );
        add_post_meta( $post_id, '_tjnz_upvotes', 0.000, true );
        add_post_meta( $post_id, '_tjnz_downvotes', 0.000, true );
        add_post_meta( $post_id, '_tjnz_hotness', $hotness, true );
    }
}

Me pregunto qué pasará cuando programes una publicación en WordPress. ¿Se activará el enlace cuando haga clic en Schedule o cuando el botón de WordPress publique la publicación?

Si el enlace se activa cuando hago clic en Programar , ¿cómo puedo cambiar eso de manera efectiva para que el tiempo insertado en la base de datos sea realmente el tiempo de publicación de la publicación, en lugar de hacer clic para programar la publicación? ?

La página de Codex para wp_insert_post indica que el objeto $post tiene un miembro 'post_date_gmt' . Está documentado como:

  

'post_date_gmt' => [ Y-m-d H:i:s ] // La publicación de la hora se realizó, en GMT.

Para mí, no está claro si significan cuándo se inserta en la base de datos (momento de hacer clic en el botón de programación) o cuándo se debe "crear" (el tiempo que ingresé en el programador). ¿Alguien puede aclarar esto?

Editar:

Después de examinar la respuesta de ialocin , he llegado a la conclusión de que mi uso actual del gancho wp_insert_post no va Para dar los resultados deseados. Intentaré otro enfoque, pero quiero aclarar mis intenciones para ayudar a otros a entender por qué necesito esto.

Como dije anteriormente, calculo un valor de "picor" para cada publicación que hago. Sin la influencia de un puntaje, el picor aumenta gradualmente con el tiempo. En Unix Epoch + 1211380200 seconds es mi 'sitio personal'. Si el post_date_gmt = 1211380200 de una publicación, se publica esencialmente en el 'nacimiento' de mi sitio (esto es el 21 de mayo de 2008).

Para cada nueva publicación, quiero guardar su valor de hotness inicial, por lo que debo saber la fecha de publicación de la publicación (en la marca de hora GMT Unix) y restar el tiempo diferente entre Unix Epoch y mi Epoch, que es 1211380200 segundos.

Cuando publico contenido, a menudo programo varias publicaciones para que estén "al aire" durante la semana, porque no tengo tiempo suficiente para publicar todos los días. Es importante que las publicaciones obtengan el valor inicial correcto, ya que es la base para cualquier cálculo adicional.

Mi nuevo enfoque sería engancharse en las transiciones de estado de publicación. Por favor, ayúdame a hacer esto bien:

add_action( 'transition_post_status', 'tjnz_prepare_postmeta', 10, 3 );
function tjnz_prepare_postmeta( $new_status, $old_status, $post ) {
    if ( $new_status == 'publish' && $old_status != 'publish' ) {
        $hotness = round( ( $post->post_date_gmt - 1211380200 ) / 800000, 7 );
        update_post_meta( $post->ID, '_tjnz_favorites', 0 );
        update_post_meta( $post->ID, '_tjnz_plays', 0 );
        update_post_meta( $post->ID, '_tjnz_downloads', 0 );
        update_post_meta( $post->ID, '_tjnz_upvotes', 0.000 );
        update_post_meta( $post->ID, '_tjnz_downvotes', 0.000 );
        update_post_meta( $post->ID, '_tjnz_hotness', $hotness );
    }
}

La razón por la que también compruebo $old_status es porque asumo que cuando actualice una publicación ya publicada, tanto $new_status como $old_status serían 'publish' . No quiero restablecer accidentalmente ninguno de los valores meta cada vez que actualizo una publicación publicada existente.

También cambié add_post_meta a update_post_meta porque de esa manera puedo asegurar que los valores correctos se inserten en la base de datos si una publicación se publica directamente o está programada. Creo que si los valores meta aún no existen, update_post_meta realmente actuará como una función add_post_meta .

    
pregunta Marc Dingena 13.02.2014 - 14:13

1 respuesta

4

La respuesta corta es que post_date y post_date_gmt se establecerán en la fecha en que programó la publicación, no en la fecha en que creó la publicación, por lo que post_date y post_date_gmt mantienen la publicación. fecha.

Actualización:

Como respuesta a un comentario:

  1. ¿Cuándo se activará el enlace wp_insert_post ?

    • En realidad, ambas veces, por lo que al hacer clic en Schedule y en el cambio programado del estado de publicación de futuro a publicación.
    • ¿Por qué? En primer lugar porque:
    • Y en segundo lugar porque es parte de:
    • que se desencadena por:
    • Eche un vistazo más de cerca a la (s) documentación (s) y conozca el código fuente, aquí principalmente post.php , siempre ayuda a entender lo que realmente está sucediendo.

  2. ¿Puede / debería usar la función time() ?

    • Ciertamente puedes, tomar la nueva información de 1. en consideración.
    • Si depende del hecho, la información que necesita ya está disponible. Si es así, entonces no hay razón para obtener la misma información dos veces.
    • Entonces, si post_date y post_date_gmt tienen la información que necesita, que sería, como se estableció, la fecha de publicación, úsela.
    • O use post_modified y post_modified_gmt si desea reflejar los cambios.

El enfoque real que elegirás realmente depende de tus necesidades / planes, de los que sé poco. Por lo que puedo decir, una cosa que definitivamente debe considerar es usar otro gancho o ganchos. Echa un vistazo a Transiciones de estado de publicación para que otras las consideren. Además, inspeccione la fuente: post.php - para Profundiza en cuándo y cómo se usan esos ganchos. Hay muchas preguntas sobre esto aquí, simplemente búsquelo.

    
respondido por el Nicolai 15.02.2014 - 16:51

Lea otras preguntas en las etiquetas