Search code examples
phpwordpressadvanced-custom-fieldscustom-post-type

WORDPRESS: sync custom post type deletion to wordpress account


So I got a custom post type called members linked with ACF. and I have it synced to WordPress users. If a user is added/edited in the custom post type it also adds/changes it in the Wordpress users.

So only thing that's not synced is deleting the users. When I delete a user in the custom post type it doesn't delete the WordPress user.

the code I have for deleting a user in the custom post type is as follows:

add_action('trashed_post', 'on_delete_members');
function on_delete_members($post_id)
{
    if (get_post_type( $post_id  ) == 'members' ) {
        $email_address = get_post_meta($post_id, 'email', true);

        $user = get_user_by('email', $email_address);

        $id = $user->ID;

        wp_delete_user($id);

        wp_delete_post($post_id, true);
    }
}

The code to sync adding and editing users is:

add_action('save_post', 'maintain_user_data', 10, 1);
add_action('publish_post', 'maintain_user_data', 10, 1);

function maintain_user_data($post_ID)
{
    $post_type = get_post_type($post_ID);
    if ($post_type == 'members') {

        $display_name= get_post_meta($post_ID, 'contactperson', true);
        $password = wp_generate_password(12, false);
        $email_address = get_post_meta($post_ID, 'email', true);

        $user = get_user_by('email', $email_address);
        $user_id = $user->ID;
        $post_second_id = get_field('post_second_id', $post_ID);
        $user_second_id = get_field('user_second_id', $post_ID);



        if ( email_exists($email_address)) {

            wp_update_user([
                'ID' => $user_id,
                'user_email' => $email_address,
                'display_name' => $display_name,
            ]);

        } else if (!email_exists($email_address)){
            //   $allowed_roles = array('administrator', 'author', 'editor');
            $user = get_user_by('login', $email_address);
            $user_id = $user->ID;

            if (current_user_can( 'administrator' + 'author' + 'editor')) {

                if ($post_second_id == $post_ID)  {


                    $user = get_user_by('id', $user_second_id);
                    $id = $user->ID;
                    global $wpdb;

                    wp_update_user([
                        'ID' => $id,
                        'user_login'    => $email_address,
                        'user_email' => $email_address,
                        'display_name' => $display_name,
                        'role' => 'Subscriber',

                    ]);
                    $wpdb->update($wpdb->users, array('user_login' => $email_address), array('ID' => $id));

                } else {
                    if ($email_address !== "") {
                        wp_insert_user([
                            'user_pass' => $password,
                            'user_login' => $email_address,
                            'user_email' => $email_address,
                            'display_name' => $display_name,
                            'role' => 'subscriber',
                            'ID' => $user_id

                        ]);


                        $user = get_user_by("email", $email_address);
                        $new_user_id = $user->ID;
                        $new_id_user = $new_user_id;
                        $new_id = $post_ID;
                        update_field('post_second_id', $new_id, $post_ID);
                        update_field('user_second_id', $new_id_user, $post_ID);


                        $email = $user->user_email;
                        $adt_rp_key = get_password_reset_key($user);

                        $rp_link = '<a href="' . home_url() . '/wachtwoord-resetten?action=rp&key=' . htmlspecialchars($adt_rp_key) . '&login=' . rawurlencode($email) . '">' . site_url() . '/wachtwoord_instellen' . '</a>';

                        $subject = "Uw account op website test.nl";
                        $headers = 'MIME-Version: 1.0' . "\r\n";
                        $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
                        $headers .= 'From: company <no-reply@test.nl>' . "\r\n";

                        $message = "Beste " . $display_name . ",<br>";
                        $message .= "Er is een account gemaakt op " . get_bloginfo('name') . " met het e-mailadress: " . $user->user_email . "<br>";
                        $message .= "Klik op deze link om je account te activeren <br>";
                        $message .= $rp_link . '<br>';

                        wp_mail($email, $subject, $message, $headers);
                    }
                }
            } else {

                $user = wp_get_current_user();

                $id = $user->ID;
                global $wpdb;

                wp_update_user([
                    'ID' => $id,
                    'user_login' => $email_address,
                    'user_email' => $email_address,
                    'display_name' => $display_name,
                    'role' => 'subscriber',

                ]);
                $wpdb->update($wpdb->users, array('user_login' => $email_address), array('ID' => $id));

                esc_url(get_home_url());
            }
        }
    }
}

I'm probably overseeing something but I'm unable to figure out what.


Solution

  • So I figured it out I changed the code up a little:

    add_action('trashed_post', 'on_delete_members');
    function on_delete_members()
    {
        $post = get_post();
        if ($post->post_type === 'members' ) {
            $email_address = get_post_meta($post->ID, 'email', true);
            $user = get_user_by('email', $email_address);
    
            $id = $user->ID;
    
            wp_delete_user($id);
    
            wp_delete_post($post->ID, true);
        }
    
    
     }
    

    another thing that was in the way was a script I had that's shown in this post off me.

    because of the wp_delete_post($post->ID, true); that already force deletes it. the 2 scripts interfered with each other. by removing that script it started working like how I want it to.