проверка профиля профиля обновляет все поле, если отсутствует wordpress

В разделе профиля редактирования всякий раз, когда я обновляю поле, и если, например, я пропустил одно обязательное поле (NickName) и изменил адрес электронной почты на новый, проверка WordPress обновит все поле и новый адрес электронной почты, который я «Введенный будет потерян.

Я не использую сторонний плагин для редактирования профиля только для общего WP. Это страница редактирования пользователя https://github.com/WordPress/WordPress/blob/master/wp-admin/user-edit.php

введите описание изображения здесь

введите описание изображения здесь

Подход 1, кнопка отмены отключения

Что вы можете сделать, это запретить пользователю сохранять форму, если необходимые поля не заполнены. Это можно просто сделать с помощью javascript.

 function require_fields_script(){ echo " <script type='text/javascript'> (function($){ $('#submit').on('click',function(e){ if (!$('#email').val() || !$('#nickname').val()){ e.preventDefault(); if (!$('#email').val()) { window.alert('Please enter your email before saving.'); } else { window.alert('Please enter your nickname before saving.'); } } }); })(jQuery); </script>"; } add_action( 'admin_footer', 'require_fields_script' ); 

Это также можно сделать, сохранив значения в переходных / глобальных переменных и извлекая их после сбоя, но это необязательно.

Дело в том, что если поле не установлено, нет оснований позволять пользователю сохранять его на первом месте.

Подход 2, возврат к значениям по умолчанию

Существует еще один трюк. При загрузке страницы будет указано значение по умолчанию / предварительно сохраненное значение как адрес электронной почты и псевдоним. Если пользователь попытался сохранить форму без ввода этих параметров, вы можете вернуть их к старым значениям. Чтобы сделать это, это ваш путь:

 function require_fields_script(){ echo " <script type='text/javascript'> (function($){ var currentMail = $('#email').val(); var currentNickname = $('#nickname').val(); $('#submit').on('click',function(e){ if (!$('#email').val()){ $('#email').val(currentMail); } if (!$('#nickname').val()){ $('#nickname').val(currentNickname); } }); })(jQuery); </script>"; } add_action( 'admin_footer', 'require_fields_script' ); 

Подход 3, подделка предупреждения администратора с помощью jQuery

Мы можем создать фальшивую ошибку администратора, используя $.before если поля не установлены. Вот как мы это делаем:

 function require_fields_script(){ echo " <script type='text/javascript'> (function($){ $('#submit').on('click',function(e){ if (!$('#email').val()){ e.preventDefault(); $( '#your-profile' ).before( '<div class=\'error\'><p><strong>ERROR</strong>: Please enter an email.</p><button type=\'button\' class=\'notice-dismiss\'><span class=\'screen-reader-text\'>Dismiss this notice.</span></button></div>' ); $('html,body').animate({scrollTop:0},700); } if (!$('#nickname').val()){ e.preventDefault(); $( '#your-profile' ).before( '<div class=\'error\'><p><strong>ERROR</strong>: Please enter a nickname.</p><button type=\'button\' class=\'notice-dismiss\'><span class=\'screen-reader-text\'>Dismiss this notice.</span></button></div>' ); $('html,body').animate({scrollTop:0},700); } }); })(jQuery); </script>"; } add_action( 'admin_footer', 'require_fields_script' ); 

Это вызовет ошибку и прокрутит страницу вверх, чтобы пользователь мог заметить ошибку. Мы можем удалить div после, но так как он будет удален автоматически при сохранении, это не обязательно делать. Во всяком случае, чтобы удалить ошибки, вы можете использовать $.remove() :

 if ($('.error').length) { $('.error').remove(); } 

ОБНОВЛЕНИЕ ПУТЬ

Я создал патч, который полностью решает проблему, выполняя проверки AJAX и jQuery. Патч можно найти здесь . На данный момент у него есть небольшая ошибка, и я скоро ее покрою.