web-dev-qa-db-ger.com

Welcher WordPress-Hook wird ausgelöst, nachdem alle Post-Daten und Post-Meta gespeichert wurden?

Ich habe einen benutzerdefinierten Beitragstyp crm und muss nach jedem gespeicherten oder aktualisierten crm eine E-Mail senden. Ich benutze cmb2 für ein benutzerdefiniertes Meta-ähnliches Thema, für Benutzer usw. Ich weiß, dass der Haken save_post nach dem Speichern nach dem Posten ausgelöst wird (gemäß WordPress-Codex) in meinem Fall, wenn ich save_post mit zwei Parametern aufrufe (id und post) der Beitrag enthält keine Aktualisierungswerte. Hier ist mein 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 ); 

Und ich probiere auch publish_post hook aus, das funktioniert gut, wenn ein neuer Beitrag erstellt wird, aber wenn es aktualisiert wird, funktioniert es genauso. Ich habe auch versucht, edit_post und post_updated einzuhängen, aber ich kann meine Aktualisierungsdaten nie abrufen.

Wie kann ich das lösen? Welcher Aktions-Hook gibt mir alle neuen Daten? Danke im Voraus.

4
M. K Hossain

Versuchen Sie es mit post_updated und verwenden Sie $post_after-Objekt. https://codex.wordpress.org/Plugin_API/Action_Reference/post_updated

1
Marian Mircea

sie können diesen save_post-Hook mit Ihrer Funktion verwenden. Ändern Sie Ihre Hook-Priorität auf 100

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

Sie können so etwas verwenden, 

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