以前、Welcartユーザーがログインする際にWordPressにも紐づくユーザーを登録する記事を書きましたが、Welcartから退会する処理を実行してもWordPress側のユーザー情報を削除する機能がありませんでしたので、今回不足していた機能を書いて行きます。
会員の権限グループを削除する他、個人情報を削除する
以下は、Welcartの退会処理の中のユーザーのメタデータを削除するタイミングで実行出来るアクションフック “usces_action_post_delete_memberdata” にWordPressユーザーの権限グループを削除して個人情報を削除する関数を追加しました。
/**
* 会員の権限グループを削除する他、個人情報を削除する
*/
function ag_member_delete()
{
//ログイン中のWordPressユーザー情報取得
$user = wp_get_current_user();
//WPユーザーテーブルから個人情報削除
$args = array(
'ID' => $user->ID,
'user_email' => md5(uniqid(rand(), 1)),
'user_email' => '',
'first_name' => '',
'last_name' => '',
'role' => '', //権限グループを空にする
'display_name' => 'non member',
);
$user_id = wp_update_user($args);
//WordPressユーザーをログアウトする
wp_logout();
}
add_action( 'usces_action_post_delete_memberdata', 'ag_member_delete', 100);
運営都合上、ユーザーIDを削除出来ませんでしたので上記のように個人情報を上書きする処理になっていますが、不要な場合は、ユーザー削除関数 “wp_delete_user()” で削除してください。
ユーザー削除関数
wp_delete_user($user->ID);
ユーザー情報を別テーブルに退避
セキュリティ面で検討が必要になりますが、ユーザー情報が消えて困る場合は別の専用テーブルにユーザー情報を退避させる方法もありかと思います。
global $wpdb;
$table = $wpdb->prefix.'delete_wpuser';
$user = wp_get_current_user();
//ユーザー情報を保存(INSERT)
$data = [
'user_id' => $user->ID,
'user_data' => serialize($user),
'created' => date_i18n('Y-m-d H:i:s'),
];
$result = $wpdb->insert( $table, $data, array('%d', '%s', '%s') );
動作環境情報
エックスサーバー(x10) PHP 7.3.14 MySQL 5.7 WordPress 5.4 Welcart e-Commerce 1.9.29
コメント