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.
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.