覚書です。
目的
Groupsプラグインでユーザー限定公開のページを管理しているWordpressサイトで、ユーザーIDとパスワードを管理者が発行してユーザーに連絡している。
メールアドレスが入力必須かつ重複不可。Wordpressの購読者ユーザーを追加する際にメールアドレスなしで追加できるようにしたい。
- メールアドレスが空のユーザーを追加してもエラーにしない
- メールアドレスフィールドの必須バリデーションを解除
- メールアドレスフィールドの「必須」ラベルを削除
- 通知メール送信オプションのチェックボックスをデフォルトでオフ
参考URL
- https://zenn.dev/bissy/articles/2256228e21f51f
- https://wordpress.stackexchange.com/questions/22754/user-without-email
動作確認
- WordPress 6.5.3
functions.phpに以下を追記した
// ユーザープロファイル更新時のエラーメッセージを抑制
add_action('user_profile_update_errors', 'my_user_profile_update_errors', 10, 3);
function my_user_profile_update_errors($errors, $update, $user) {
$errors->remove('empty_email');
}
// フォームのバリデーションとラベル変更
add_action('user_new_form', 'my_user_new_form', 10, 1);
add_action('show_user_profile', 'my_user_new_form', 10, 1);
add_action('edit_user_profile', 'my_user_new_form', 10, 1);
function my_user_new_form($form_type) {
?>
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', function() {
// メールフィールド行を取得
var emailRow = document.querySelector('#email').closest('tr');
if (emailRow) {
// 'form-required'クラスを削除
emailRow.classList.remove('form-required');
// 説明を削除
var description = emailRow.querySelector('.description');
if (description) {
description.remove();
}
}
// 新しいユーザー追加フォームの場合、通知メール送信オプションをデフォルトでオフにする
<?php if (isset($form_type) && $form_type === 'add-new-user') : ?>
var sendUserNotification = document.querySelector('#send_user_notification');
if (sendUserNotification) {
sendUserNotification.checked = false;
}
<?php endif; ?>
});
</script>
<?php
}
user_profile_update_errors
フックを使って、メールアドレスが空の場合でもエラーメッセージが出ないように。my_user_profile_update_errors
関数がエラーメッセージを削除。
document.querySelector('#email').closest('tr')
でメールアドレス入力フィールドの行 (<tr>
) を取得。その行から form-required
クラスを削除し、説明文も削除。
新しいユーザーを追加するときに、通知メールを送るオプションのチェックボックスをデフォルトでオフ。form_type
が add-new-user
の場合のみ行う。
コメント