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
.