Qual é considerada a data de criação da postagem para wp_insert_post?

4

Eu tenho o seguinte hook que define um "hotness" padrão para um post. Para o contexto, o hotness é um meta_value salvo na postagem e muda sempre que alguém faz uma votação positiva ou negativa na postagem. Eu uso este meta_value para classificar mensagens em um 'O que está quente agora?' página.

Porque no momento em que a postagem é criada no WordPress, a "pontuação" de votos positivos versus votos negativos é 0. Portanto, posso omitir completamente a parte da pontuação do cálculo de hotness. Quando a postagem é criada, apenas o tempo de criação é considerado:

/* 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 );
    }
}

Eu estou querendo saber o que acontece quando você agenda uma postagem no WordPress. O gancho será acionado quando eu clicar em Agenda , ou quando o trabalho do WordPress publicar o post?

Se o gancho for acionado quando clico em Agenda , como posso efetivamente alterar isso para que o tempo inserido no banco de dados seja realmente o tempo de publicação da postagem, em vez de clicar para agendar a postagem ?

A página do Codex para wp_insert_post indica que o objeto $post tem um membro 'post_date_gmt' . Está documentado como:

  

'post_date_gmt' => [ Y-m-d H:i:s ] // A publicação da hora foi feita em GMT.

Para mim, não está claro se eles significam quando é inserido no banco de dados (hora de clicar no botão de agendamento) ou quando é 'significado' para ser criado (o horário que eu inseri no agendador). Alguém pode esclarecer isso?

Editar:

Depois de examinar a resposta do ialocin , concluí que meu uso atual do gancho wp_insert_post não vai para produzir os resultados desejados. Tentarei outra abordagem, mas quero esclarecer minhas intenções para ajudar os outros a entender por que preciso disso.

Como eu disse anteriormente, eu calculo um valor de "gostosura" para cada post que eu faço. Sem a influência de uma pontuação, o calor ainda aumenta gradualmente ao longo do tempo. Em Unix Epoch + 1211380200 seconds está o meu 'site pessoal Época'. Se uma postagem for post_date_gmt = 1211380200, ela será postada basicamente no "nascimento" do meu site (isso é 21 de maio de 2008).

Para cada novo post, eu quero salvar seu valor de hotness inicial, então eu tenho que saber a data de publicação do post (no timestamp GMT Unix) e subtrair o tempo diferente entre o Unix Epoch e meu Epoch, que é 1211380200 segundos. / p>

Quando postar conteúdo, geralmente programo várias postagens para que fiquem no ar durante a semana, porque não tenho tempo suficiente para postar todos os dias. É importante que as postagens tenham o valor inicial correto, porque é a base para qualquer cálculo adicional.

Minha nova abordagem seria conectar-se às transições de status de postagem. Por favor, ajude-me a acertar:

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 );
    }
}

O motivo pelo qual eu também verifiquei $old_status é porque suponho que quando eu atualizar uma postagem já publicada, tanto $new_status quanto $old_status seriam 'publish' . Eu faço não quero acidentalmente redefinir qualquer um dos valores meta toda vez que eu atualizar um post publicado existente.

Eu também alterei add_post_meta para update_post_meta porque dessa forma eu posso garantir que os valores corretos sejam inseridos no banco de dados, independentemente de uma postagem ser Publicada diretamente ou Agendada. Acredito que, se os valores meta ainda não existirem, update_post_meta realmente atuará como uma função add_post_meta .

    
por Marc Dingena 13.02.2014 / 14:13

1 resposta

4

A resposta curta é: post_date e post_date_gmt serão definidos para a data em que você agendou a postagem a ser publicada, não a data em que você criou a postagem. Portanto, post_date e post_date_gmt estão mantendo a publicação encontro.

Atualização:

Como resposta ao comentário:

  1. Quando o gancho wp_insert_post será acionado?

    • Na verdade, ambas as vezes, portanto, clicando em Planejar e na alteração planejada do status da postagem de futuro para publicação.
    • Por quê? Primeiro porque:
    • E em segundo lugar, porque faz parte de:
    • Qual é acionado por:
    • Dê uma olhada mais de perto na (s) documentação (ões) e conheça o código fonte, aqui principalmente post.php , sempre ajuda a entender o que realmente está acontecendo.

  2. Pode / você deve usar a função time() ?

    • Você certamente pode levar em consideração as novas informações de 1..
    • Se você depender do fato, as informações que você precisa já estão disponíveis. Se for, então não há razão para obter a mesma informação duas vezes.
    • Portanto, se post_date e post_date_gmt tiverem as informações necessárias, o que seria, como foi estabelecido, a data de publicação, use-as.
    • Ou use post_modified e post_modified_gmt se você quiser refletir as alterações.

A abordagem atual que você vai escolher realmente depende de suas necessidades / planos, sobre os quais eu sei pouco. Tanto quanto eu posso dizer uma coisa que você definitivamente deve considerar está usando outro gancho - ou ganchos. Dê uma olhada em Poste Transições de Status para que outros considerem. Inspecione também a fonte - post.php - para aprofunde-se quando e como esses ganchos são usados. Há muitas perguntas sobre isso aqui, basta procurar por ele.

    
por Nicolai 15.02.2014 / 16:51