chamar uma function quando inserir e atualizar um tipo de postagem personalizado

Aqui eu tenho tipo de postagem personalizado chamado products e é taxonomia é product_categories . O que eu preciso é quando adiciono a postagem em produtos, preciso chamar a function1, quando atualizo a publicação, então preciso chamar a function2. Como fazer isso?

Procurei no google e encontrei esta solução:

 add_action('save_post', 'save_in_filter', 10, 2); function save_in_filter($post_id, $post){ function1(); } function mynewproduct(){ myfunction(); } 

Mas o que acontece é quando eu clico em adicionar nova postagem de repente, a function1 () executa, mas o que eu preciso é executar a function1 depois de inserir os dados não antes de inserir os dados.

Quando uma postagem é adicionada a produtos (post_type=products) preciso executar function1() . Quando uma publicação é atualizada em produtos, preciso executar function2(); Por que post_updated, a function save_post não funciona corretamente?

Solutions Collecting From Web of "chamar uma function quando inserir e atualizar um tipo de postagem personalizado"

Esta é a resposta original, mas é pouco defeituosa, veja abaixo a atualização

Você pode usar a seguinte abordagem.

O my_action_updated_post_meta é executado após a inserção da publicação ou a atualização está concluída:

 // define the updated_post_meta callback function my_action_updated_post_meta( $array, $int, $int ) { global $post; // see your updated post print_r($post); // make your action here... die('after update'); }; // add the action add_action( 'updated_post_meta', 'my_action_updated_post_meta', 10, 3 ); 

Aqui está a página de documentação da function.

Atualizar

Tenho notado que a resposta acima é um pouco defeituosa – a ação atualizada_post_meta (para atualizações de postagem) é triggersda também ao abrir a publicação para edição no painel de administração (uma vez que o _edit_lock está definido então), mesmo quando nenhuma mudança real é feita então.

Então eu mudei a abordagem.

Eu uso uma variável global $my_updated_flag para saber que uma mudança “real” foi feita. Eu configurei essa variável como “1” por ação post_updated . Então, se $my_updated_flag == 1 , sabemos que isso não é apenas uma mudança _edit_lock . Para diferenciar a ação de inserção e atualização do post, verifico o $post->post_status == 'draft' pois as novas postagens possuem status de “rascunho” nessa etapa.

 $my_updated_flag = 0; // define the updated_post_meta callback function action_updated_post_meta( $meta_id, $post_id, $meta_key, $meta_value = '' ) { global $post, $my_updated_flag; if ($my_updated_flag == 1) { if ($post->post_status == 'draft') { die('post_inserted'); } else { die('post_updated'); } $my_updated_flag = 0; } }; add_action( 'updated_post_meta', 'action_updated_post_meta', 10, 4 ); function action_post_updated( $array, $int, $int ) { global $my_updated_flag; $my_updated_flag = 1; }; add_action( 'post_updated', 'action_post_updated', 10, 3 ); 

post_updated uma olhada no gancho post_updated por exemplo ..

 // Hook to all private or public post types updating add_action( 'post_updated', 'my_function' ); function my_function( $post_id ){ $post_status = get_post_status( $post_id ); switch ( $post_status ) { case 'draft': case 'auto-draft': case 'pending': case 'inherit': case 'trash': return; case 'future': case 'publish': case 'private': // continue } 'do something; }