web-dev-qa-db-fra.com

Quel hook WordPress se déclenche après avoir sauvegardé toutes les données et post meta?

J'ai un type de message personnalisé crm, et j'ai besoin d'envoyer un courrier après chaque fichier enregistré ou mis à jour. Je utilisateur cmb2 pour certains méta personnalisé comme sujet, aux utilisateurs, etc. Je sais que le crochet save_post se déclenche après la sauvegarde (selon le codex WordPress) dans mon cas, quand je appelle save_post avec deux paramètres (id et post) la publication ne contient pas de valeurs de mise à jour. voici mon code:

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 ); 

Et j'essaie aussi publish_post hook, ça marche bien quand un nouveau post est créé mais quand il est mis à jour, ça marche pareil. J'ai aussi essayé edit_post et post_updated hook, mais je ne pourrai jamais récupérer mes données de mise à jour.

Alors, comment puis-je le résoudre? quelle action hook me donnera toutes les nouvelles données? Merci d'avance.

4
M. K Hossain

Essayez avec post_updated et utilisez l'objet $post_after. https://codex.wordpress.org/Plugin_API/Action_Reference/post_updated

1
Marian Mircea

vous pouvez utiliser ce hook save_post avec votre fonction. changer votre priorité de crochet à 100, il vous donnera mis à jour post

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

Vous pouvez utiliser quelque chose comme ça, 

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); 
2
Abdul Waheed