Функция wp_nonce_field() используется для создания скрытого одноразового поля (nonce) в HTML-форме. Это поле помогает защитить данные формы от атак с использованием поддельных запросов (CSRF — Cross-Site Request Forgery).
Nonce (одноразовое число) гарантирует, что данные формы отправлены именно с вашего сайта, а не из других источников. Хотя это не обеспечивает 100% защиту, использование таких полей значительно снижает риски несанкционированного доступа.
wp_nonce_field( int|string $action = -1, string $name = '_wpnonce', bool $referer = true, bool $display = true ): stringПараметры
- $action(int|string)— Уникальный идентификатор действия для генерации nonce. Это может быть строка или число, которое используется как ключ для создания уникальной комбинации символов.- По умолчанию: -1
 
- По умолчанию: 
- $name(string)— Имя атрибутаnameдля скрытого поля в HTML-форме. Значение nonce будет доступно в массиве$_POST[$name].- По умолчанию: _wpnonce
 
- По умолчанию: 
- $referer(bool)— Добавляет дополнительное скрытое полеreferer, которое содержит URL-адрес страницы, с которой была отправлена форма.- По умолчанию: true
 
- По умолчанию: 
- $display(bool)— Определяет, выводить ли результат напрямую или вернуть его как строку.- По умолчанию: true
 
- По умолчанию: 
Возвращаемое значение
Возвращает HTML-код скрытого поля формы, содержащего одноразовое значение (nonce). Если параметр $display установлен в false, возвращает строку HTML-кода без вывода на экран.
Пример 1: Усиленная защита
Для улучшения безопасности можно указать значения параметров $action и $name:
<form method="post">
   <!-- другие поля формы -->
   <?php wp_nonce_field('my_custom_action', 'my_nonce_field'); ?>
</form>
После отправки формы необходимо проверить переданные данные с помощью функции wp_verify_nonce():
if ( !isset($_POST['my_nonce_field']) || !wp_verify_nonce($_POST['my_nonce_field'], 'my_custom_action') ) {
    echo 'Извините, проверочные данные не соответствуют.';
    exit;
} else {
    // Обрабатываем данные
}
Пример 2: Проверка в административной панели
Если данные принимаются в административной панели, можно использовать функцию check_admin_referer() для проверки nonce:
function my_admin_handler() {
    // Проверка одноразового поля и реферера
    check_admin_referer('my_custom_action', 'my_nonce_field');
    
    // Логика обработки
}Функция check_admin_referer() автоматически завершит выполнение PHP-скрипта при неудачной проверке и выведет сообщение об ошибке.
Пример 3: Стандартная защита формы
Простой пример использования без указания параметров:
<form method="post">
   <?php wp_nonce_field(); ?>
</form>
Это создаст следующие скрытые поля:
<input type="hidden" id="_wpnonce" name="_wpnonce" value="4357708578" />
<input type="hidden" name="_wp_http_referer" value="/current-url" />Для проверки данных используйте функцию wp_verify_nonce():
if ( isset( $_REQUEST['_wpnonce'] ) && wp_verify_nonce( $_REQUEST['_wpnonce'], 'my_action' ) ) {
    // Логика обработки данных
} else {
    die( 'Ошибка безопасности' );
}
Примечания
- Использование параметров $actionи$nameпомогает усилить защиту от атак. В случае использования по умолчанию, злоумышленник может предугадать стандартные значения и попытаться их использовать.
- Функция wp_nonce_field()тесно связана с функциейwp_verify_nonce(), которая проверяет корректность nonce при получении данных формы.
Заключение
Функция wp_nonce_field() используется для создания скрытого одноразового поля (nonce) в HTML-форме. Использование одноразовых полей (nonce) в формах WordPress является обязательным элементом безопасности. Не пренебрегайте возможностью указать уникальные значения параметров $action и $name для дополнительной защиты.
