Função para executar quando uma postagem é movida para a lixeira.

9

Oi, existe uma ação que pode ser executada enquanto uma postagem é movida para o lixo .... Tentei delete_post e delete_post. Ele funciona apenas duas vezes para cada ação (antes e depois da ação, conforme escrito no codex) e a saída é mostrada apenas quando a postagem é excluída da lixeira. Exemplo: desejo enviar um e-mail ao autor informando que sua postagem foi movida para a lixeira por algum motivo e atualizar alguns user_meta. se eu usar

add_action('deleted_post', 'emailUser');

ou

add_action('delete_post', 'emailUser');

funciona apenas quando a postagem é excluída da lixeira. . .

Atualização: funcionou para postagens de lixo usando

add_action('trash_post', 'emailUser');

mas o problema da dupla execução da função ainda está lá. . .

Harjeet Singh
fonte
11
Escreva a solução abaixo e marque-a como resposta
Ashfame 28/02
não é a resposta adequada como a execução dupla função ainda está lá ...
Harjeet Singh

Respostas:

10

Isto irá fazer o truque!

add_action('trash_post','my_trash_post_function',1,1);
function my_trash_post_function($post_id){
    if(!did_action('trash_post')){
        // do stuff
    }
}

Aqui nós adicionamos a função e para impedir que o gancho seja executado mais de uma vez usando did_action:

http://codex.wordpress.org/Function_Reference/did_action

Como sempre, esses tipos de ganchos assumir a forma {post_status}_{post_type}, por isso trash_post, trash_page, trash_customposttype, publish_pageetc

Tom J Nowell
fonte
2

Essa ação será chamada uma vez quando a postagem for movida para a lixeira e novamente quando a lixeira for esvaziada.

Sua função pode verificar a presença de uma opção com o ID da postagem no nome; se a opção não estiver lá, ela envia o e-mail e define a opção. Se a opção estiver lá (por exemplo, está sendo chamada uma segunda vez), você não enviaria o email.

Lembre-se de excluir a opção, para que seu banco de dados não os preencha!

add_action( 'delete_post', 'emailUser' );

function emailUser( $postid ) {

   if ( ! get_option( 'user_emailed_' . $postid ) ) {
      // send email here
      update_option( 'user_emailed_' . $postid, 'anything' );
   } else {
      delete_option( 'user_emailed_' . $postid );
   }

}

Deixe-me saber se isso funciona!

Simon Blackbourn
fonte
você pode usar a API Transitórios em vez de opções para que você não vai precisar se preocupar com a exclusão de opções do banco de dados codex.wordpress.org/Transients_API
Bainternet
Obrigado Simon, que funciona muito bem. . . . Não sei como n porque eu perdi isso. . ..
Harjeet Singh
Bainternet, vi os transientes e eles são bem parecidos com get_option no meu caso e também uso get_option para a coisa de excluir, pois a execução também depende do desempenho do servidor e do cálculo do tempo de execução do código antes e após a exclusão de a postagem pode ficar difícil.
Harjeet Singh
Não é necessário começar a adicionar / editar campos ou transientes de opções, adicionando consultas extras. Em vez disso, basta chamar did_action para verificar se o gancho já foi acionado.
Tom J Nowell
1
add_action('trash_post', 'trash_post_function_name');

O gancho acima não funcionou para mim no WP 4.7.5.

Isto é o que funcionou para mim

add_action('wp_trash_post', 'trash_post_function_name');
Mohamed Salem Lamiri
fonte