wordpress WordPressでユーザー名を変更する 作成日: 2026年1月17日
通常WordPressでは登録したユーザー名は変更できないが、複数ユーザーで運用する場合のユーザー名を変更可能にするコードを作った。
adminも変えられるようになってしまったけど気にしない。
この変更作業ができるのは管理者権限保有ユーザーのみとして、一応の秩序は持たせるようにしている。
この「技術備忘録」アーカイブの親子ユーザー一括登録も併存可能、あまり使わないけど欲しかった=開発中のものでのテストサイトがユーザー名変えると面倒という動機だが、WPで変なシステム作るならこうしたものは資産として持っていた方がベターなので作った。

以下のコードをfunction.phpに追記
この環境なら動いているけど、備忘録だから動作保証はしません。
//===================================================================//管理者(administrator)の画面でユーザー名のロックを完全に解除する//===================================================================add_action('admin_footer', function() {// ユーザー編集画面(user-edit.php)またはプロフィール画面(profile.php)以外は無視$screen = get_current_screen();if ( $screen->id !== 'user-edit' && $screen->id !== 'profile' ) {return;}
// 現在のログインユーザーが管理者でない場合は何もしないif ( ! current_user_can('administrator') ) {return;}?><script type="text/javascript">jQuery(document).ready(function($) {var userLoginInput = $('#user_login');if (userLoginInput.length) {// disabled属性とreadonly属性を両方削除userLoginInput.removeAttr('disabled').removeAttr('readonly');// 背景色を白にして「入力可能」であることを視覚的にわかりやすくするuserLoginInput.css('background-color', '#fff');// 説明文を更新userLoginInput.closest('tr').find('.description').html('<span style="color:red; font-weight:bold;">【管理者権限】ユーザー名を変更可能です。</span>');}});</script><?php});
/*** 2. プロフィール更新時に、管理者のみユーザー名を強制書き換えする*/add_action('edit_user_profile_update', 'force_update_user_login'); // 他人の編集時add_action('personal_options_update', 'force_update_user_login'); // 自分のプロフィール編集時
function force_update_user_login($user_id) {// 操作者が管理者でない場合は中断if ( ! current_user_can('administrator') ) {return;}
if ( isset($_POST['user_login']) && !empty($_POST['user_login']) ) {$new_login = sanitize_user($_POST['user_login']);$user_data = get_userdata($user_id);
if ( $new_login !== $user_data->user_login ) {global $wpdb;
// 他のユーザーと重複していないかチェックif ( username_exists($new_login) ) {wp_die('エラー:そのユーザー名は既に他のユーザーに使用されています。');}
// データベースを直接更新$wpdb->update($wpdb->users,array('user_login' => $new_login),array('ID' => $user_id));// 自分のユーザー名を変えた場合にログアウトされないようにするif ( get_current_user_id() === $user_id ) {wp_set_auth_cookie($user_id);}}}
【動作要件】
WP6.8でのみ確認、多分6x以上なら問題ないと思う。
プラグイン互換などは一切試していない。基本PL嫌いだし。当然既存PL特にセキュリティ系とは合わないかも。
PHP8以上かな?確認は8.2だけど8xならいけんじゃん?8upのみの関数使ってるか未確認。
そのへんのレンタルサーバーなら多分普通に動くと思う。