Итак, я получил пользовательский тип записи, который называется "члены связаны с ACF". и я синхронизировал его с пользователями WordPress. Если пользователь добавляется / редактируется в пользовательском типе записи, он также добавляет / изменяет его в пользователях Wordpress.
Поэтому единственное, что не синхронизируется, - это удаление пользователей. Когда я удаляю пользователя в пользовательском типе записи, он не удаляет пользователя WordPress.
код, который я имею для удаления пользователя в пользовательском типе записи, выглядит следующим образом:
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);
}
}
Код для синхронизации c добавления и редактирования пользователей:
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());
}
}
}
}
Возможно, я что-то наблюдаю, но не могу понять, что.