qual é a maneira correta de ligar quando atualizar post

14

eu tento ligar quando a postagem é atualizada, mas todos os hooks que eu tento nunca executam, exceto updated_post_meta

add_action('updated_post_meta', 'my_function');

function my_function($post_id) {    
    echo 'This is my post ID : '.$post_id;
}

Eu tentei esse add_action('save_post', 'my_function'); , mas nenhum ID foi ecoado, ou talvez essa mensagem já seja echo, mas nunca renderiza porque o cabeçalho de redirecionamento é enviado.

    
por rusly 14.02.2014 / 17:23

2 respostas

40

Quando uma postagem é atualizada, alguns ganchos são acionados:

  • 'pre_post_update' é uma ação acionada apenas antes de a postagem ser atualizada, o argumento aprovado é 2: $post_ID e $data que é uma matriz de all as outras colunas do banco de dados da tabela de postagens
  • 'transition_post_status' é um gancho disparado na atualização e passa 3 argumentos: $ new_post_status, $old_post_status e $post (object).
  • Em seguida, há outros dois ganchos de transição acionados, mas eles são dinâmicos, o que significa que a ação efetiva acionada depende do status antigo e do novo status. "{$old_status}_to_{$new_status}" e "{$new_status}_{$post->post_type}" . Primeiro passe o único objeto post como argumento, o segundo passe o id do post e o objeto post. Encontre a documentação aqui .
  • 'edit_post' que passa 2 argumentos: $post_ID e $post (objeto)
  • 'post_updated' que passa 3 argumentos: $post_ID , $post_after (postar objeto após a atualização), $post_before (postar objeto antes da atualização)
  • Outro gancho dinâmico: "save_post_{$post->post_type}" que depende do tipo de postagem, por exemplo para postagens padrão é 'save_post_post' e para páginas é 'save_post_page' , este gancho passa 3 argumentos: $post_ID , $post (objeto) e $update que é um booleano (verdadeiro ou falso) que é verdadeiro quando você executa uma atualização, na verdade, esse gancho é disparado também quando uma postagem é salva pela primeira vez.
  • ' save_post ' que é acionado tanto na atualização quanto na primeira gravação e passa os mesmos 3 argumentos do gancho anterior.
  • ' save_post_{$post_type} ' que é acionado tanto na atualização quanto na primeira gravação e passa os mesmos 2 primeiros argumentos do gancho anterior.
  • Finalmente, você tem ' wp_insert_post ' , que é acionado tanto na atualização quanto na primeira gravação, e passa os mesmos 3 argumentos dos dois ganchos anteriores.

Esse gancho é acionado sempre que um post é atualizado, tanto por meio de páginas de administração no backend quanto por meio de atualizações "manualmente" usando wp_update_post ou wp_insert_post funções.

Quando a postagem é atualizada usando páginas de administração, ganchos adicionais são acionados. Um exemplo é 'update_post_redirect' ou 'post_updated_messages' . (Veja este e este WPSE responde por exemplos de uso).

Note que se você quiser fazer uso de algum argumento de hooks, que não é o primeiro, você deve declará-lo explicitamente em add_action call.

Por exemplo Se você quiser usar o argumento '$update' (ou seja, o terceiro) do gancho 'save_post' , será necessário adicionar 3 como $accepted_args param em add_action (ver os documentos ):

// if you don't add 3 as as 4th argument, this will not work as expected
add_action( 'save_post', 'my_save_post_function', 10, 3 );

function my_save_post_function( $post_ID, $post, $update ) {
  $msg = 'Is this un update? ';
  $msg .= $update ? 'Yes.' : 'No.';
  wp_die( $msg );
}

Última observação tempo : você deve ter certeza que add_action é chamado antes a ação é acionada, ou não fará nada.

Por exemplo este código:

wp_update_post( $post );
add_action( 'save_post', 'my_function', 10, 3 );

não fará nada, porque a ação é adicionada depois que o gancho é disparado. Aqui é simples reconhecê-lo, no mundo real o código nem sempre é assim.

    
por gmazzap 14.02.2014 / 18:08
1

Por que não ligar em post_updated_messages . Dessa forma, você pode mostrar essa mensagem exatamente como a postagem padrão do wordpress atualizada.

add_filter('post_updated_messages', 'your_message');

function your_message(){
}

Procure um exemplo aqui:

enlace

em post_updated_messages

    
por Jacob Rambo 14.02.2014 / 17:39