保存所有发布数据并发布元后,哪个WordPress挂钩会触发?

时间:2017-06-13 10:21:22

标签: php wordpress wordpress-hook cmb2

我有自定义帖子类型crm,我需要在每个crm保存或更新后发送邮件。我用户cmb2用于某些自定义元类主题,用户等。我知道save_post挂钩在我的情况下保存(根据WordPress codex)后,当我调用{{1}时触发带有两个参数(id和post)帖子不包含更新值。这是我的代码:

save_post

我还尝试function send_mail_to_user($id, $post){ $crm = $post; $user_email = array(); if($crm->vc_all_vc == 'on'){ $args = array('orderby' => 'display_name'); $wp_user_query = new WP_User_Query($args); $authors = $wp_user_query->get_results(); if (!empty($authors)) { foreach ($authors as $author) { array_push($user_email , $author->user_email ); } } } else{ $to_users = $crm->vc_users; $to_program = $crm->vc_program; $to_group = $crm->vc_group; $to_excode = $crm->vc_ex_code; foreach ($to_users as $key => $value) { $user_data = get_userdata($value); array_push($user_email, $user_data->user_email); } foreach ($to_program as $key => $value) { $users = get_users( array('meta_key' => 'programs' ) ); if($users){ foreach ($users as $index => $data) { if(in_array($value , explode('#', $data->programs))){ if(! in_array($data->user_email, $user_email) ) { array_push($user_email, $data->user_email); } } } } } foreach($to_group as $group) { $term = get_term_by('slug', esc_attr($group), 'user-group'); $user_ids = get_objects_in_term($term->term_id, 'user-group'); foreach($user_ids as $user_id){ $fc_user = get_userdata($user_id); if(! in_array($fc_user->user_email, $user_email) ) { array_push($user_email, $fc_user->user_email); } } } foreach($to_excode as $codes) { $value = explode('*',$codes)[1]; $users = get_users( array('meta_key' => 'programs' ) ); if($users){ foreach ($users as $index => $data) { if(in_array($value , explode('#', $data->programs))){ if(! in_array($data->user_email, $user_email) ) { array_push($user_email, $data->user_email); } } } } } } foreach($user_email as $index => $email){ $to = $email; $subject = $crm->vc_subject; $body = $crm->post_content; $headers = array( 'Content-Type: text/html; charset=UTF-8' ); wp_mail($to, $subject, $body, $headers); } } add_action( 'save_post', 'send_mail_to_user', 10, 2 ); 钩子,在创建新帖子时工作正常但在更新时它的工作方式相同。我也尝试了publish_postedit_post,但我永远无法检索更新数据。

那我怎么解决呢?哪个动作挂钩会给我所有的新数据? 提前谢谢。

5 个答案:

答案 0 :(得分:3)

你可以在函数中使用这个save_post钩子。将您的挂钩优先级更改为100它将为您提供更新的帖子

add_action( 'save_post', 'send_mail_to_user', 100, 2 );

答案 1 :(得分:2)

尝试post_updated并使用$post_after对象。 https://codex.wordpress.org/Plugin_API/Action_Reference/post_updated

答案 2 :(得分:2)

你可以使用这样的东西,

function your_custom_function($meta_id, $post_id, $meta_key='', $meta_value='') {
    if($meta_key=='_edit_lock') {
        // if post meta is updated
    }
}
add_action('updated_post_meta', 'your_custom_function', 10, 4); 

答案 3 :(得分:0)

您可以使用rest_after_insert_{$this->post_type}钩子(其中$this->post_type被替换为帖子类型,例如'post'或'myposttype')。

感谢Florian Brinkmann的this link

add_action('rest_after_insert_myposttype', 'myfunction', 10, 3);

function myfunction($post, $request, $creating) {
   // $creating is TRUE if the post is created for the first time,
   // false if it's an update

   //  ...
}

See also here

答案 4 :(得分:0)

一些解决方法是将 $_POST['meta_field'] 与卫生一起使用:

   Country Indicators Value
0       UK      Class    50
3       UK      Price    30
1  Germany      Class    10
4  Germany      Price    35
2   France      Class    50
5   France      Price    20

注意字段名称,使用ACF会让你使用字段键。

这个问题比乍一看更复杂:

我们的 'post_updated' hook 在帖子更新之前运行,因此每次获取元数据的尝试都会产生先前的数据。此外,Wordpress (v5.7.2) 在保存帖子后似乎没有挂钩。

此外,'save_post' hook 非常复杂,因为它为保存或创建的每个帖子(包括修订版)运行,并且 $update 布尔值仍然不够可靠。