wp_nonce_field()

Извлекает или отображает скрытое поле nonce для форм
Функция WordPress
INT 2.0.4
WordPress Icon

Описание функции

Функция wp_nonce_field() используется для получения или отображения скрытого поля nonce в формах. Nonce (число использования) — это уникальная строка, которая генерируется для каждого запроса и используется для безопасности и проверки подлинности данных.

Использование

wp_nonce_field( int|string $action = -1, string $name = '_wpnonce', bool $referer = true, bool $display = true ): string

Функция wp_nonce_field() принимает следующие параметры:

  • $action (int|string) (необязательно): Название действия. По умолчанию: -1
  • $name (string) (необязательно): Название nonce. По умолчанию: ‘_wpnonce’
  • $referer (bool) (необязательно): Устанавливать ли поле referer для проверки. По умолчанию: true
  • $display (bool) (необязательно): Отображать или возвращать скрытое поле формы. По умолчанию: true

Функция возвращает HTML-разметку поля nonce.


/**
 * Пример использования функции wp_nonce_field()
 */
$action = 'my_action'; // Название действия
$name = 'my_nonce'; // Название nonce
$referer = true; // Устанавливать поле referer
$display = true; // Отображать скрытое поле
$nonce_field = wp_nonce_field( $action, $name, $referer, $display );
echo $nonce_field;

В этом примере мы создаем поле nonce с заданным названием действия и названием nonce. Поле referer будет установлено для проверки. Скрытое поле будет отображаться на странице.

Примеры использования

Генерация nonce для формы


/**
 * Генерация nonce для формы.
 *
 * @param int|string $action Optional Action name. Default: -1
 * @param string $name Optional Nonce name. Default '_wpnonce'. Default: '_wpnonce'
 * @param bool $referer Optional Whether to set the referer field for validation. Default: true
 * @param bool $display Optional Whether to display or return hidden form field. Default: true
 *
 * @return string Nonce field HTML markup.
 */
wp_nonce_field( $action, $name, $referer, $display );

Проверка валидности nonce


/**
 * Проверка валидности nonce.
 *
 * @param string $action Action name.
 * @param string $nonce Nonce value.
 *
 * @return false|int False if the nonce is invalid, 1 if the nonce is valid and generated between 0-12 hours ago, 2 if the nonce is valid and generated between 12-24 hours ago.
 */
if ( wp_verify_nonce( $nonce, $action ) ) {
    // Нонс валиден.
} else {
    // Нонс недействителен.
}

Создание ссылки с nonce


/**
 * Создание ссылки с nonce.
 *
 * @param string $url URL to add nonce action.
 * @param int|string $action Action name.
 * @param string $name Nonce name.
 *
 * @return string URL with nonce action added.
 */
$url = wp_nonce_url( $url, $action, $name );

Использование nonce в AJAX запросах


/**
 * Использование nonce в AJAX запросах.
 */
var data = {
    action: 'my_ajax_action',
    nonce: '<?php echo wp_create_nonce( "my_ajax_action" ); ?>'
};
jQuery.post( ajaxurl, data, function( response ) {
    // Обработка ответа.
});

Интеграция с плагинами и темами


/**
 * Интеграция с плагинами и темами.
 *
 * @param string $action Action name.
 *
 * @return string Nonce field HTML markup.
 */
echo wp_nonce_field( 'my_custom_action', 'my_custom_nonce' );

Вопросы и ответы

Как проверить nonce значение после отправки формы?

Для проверки значения nonce после отправки формы в WordPress можно использовать функцию wp_verify_nonce(). Она принимает два параметра: значение nonce и имя действия. Функция возвращает true, если nonce действительный, и false в противном случае.


if ( isset( $_POST['_wpnonce'] ) && wp_verify_nonce( $_POST['_wpnonce'], 'my_action' ) ) {
    // Действия при успешной проверке nonce
} else {
    // Действия при недействительном или отсутствующем nonce
}

Как изменить имя поля nonce?

Имя поля nonce по умолчанию в WordPress — _wpnonce. Чтобы изменить его, можно передать новое имя вторым параметром функции wp_nonce_field().


wp_nonce_field( 'my_action', 'my_nonce_field' );

Как отключить добавление referer поля в nonce?

По умолчанию, функция wp_nonce_field() добавляет поле referer в nonce. Чтобы отключить это поведение, можно передать третий параметр со значением false.


wp_nonce_field( 'my_action', '_wpnonce', false );

Как скрыть поле nonce в форме?

Для скрытия поля nonce в форме можно использовать параметр $display функции wp_nonce_field(). Если установить его значение в false, то функция вернет только HTML-разметку поля nonce без его отображения на странице.


$nonce_field = wp_nonce_field( -1, '_wpnonce', true, false );

Как добавить дополнительные атрибуты к полю nonce?

Для добавления дополнительных атрибутов к полю nonce можно использовать параметр $referer функции wp_nonce_field(). Если установить его значение в false, то функция не будет добавлять поле referer для валидации.


$nonce_field = wp_nonce_field( -1, '_wpnonce', false, true );

Как использовать nonce в AJAX запросах?

Для использования nonce в AJAX запросах необходимо передать его значение вместе с запросом и проверить его на сервере. Для этого можно использовать функцию wp_verify_nonce().


// В JavaScript
var data = {
    action: 'my_ajax_action',
    nonce: '<?php echo wp_create_nonce( "my_ajax_nonce" ); ?>'
};
// В PHP
if ( isset( $_POST['nonce'] ) && wp_verify_nonce( $_POST['nonce'], 'my_ajax_nonce' ) ) {
    // Валидация пройдена
} else {
    // Ошибка валидации
}

Как создать несколько полей nonce в одной форме?

Для создания нескольких полей nonce в одной форме можно использовать функцию wp_nonce_field() несколько раз, указывая разные значения для параметра $action. Например:


wp_nonce_field( 'my_action_1', 'my_nonce_1' );
wp_nonce_field( 'my_action_2', 'my_nonce_2' );

Как проверить nonce значение при обработке формы?

Для проверки значения nonce при обработке формы можно использовать функцию wp_verify_nonce(). Например:


if ( isset( $_POST['my_nonce'] ) && wp_verify_nonce( $_POST['my_nonce'], 'my_action' ) ) {
    // Верификация пройдена, выполняем действия
} else {
    // Верификация не пройдена, выводим ошибку
}

Как обновить nonce значение при каждой загрузке страницы?

Nonce значение обновляется автоматически при каждой загрузке страницы. Для вывода обновленного значения можно использовать функцию wp_nonce_field() с параметром $display равным false. Например:


$nonce_field = wp_nonce_field( -1, 'my_nonce', true, false );
echo $nonce_field;

Функция wp_nonce_field() в WordPress используется для создания и проверки nonce полей в формах. Она позволяет обеспечить безопасность при отправке данных и защитить от CSRF атак. Создание нескольких полей nonce в одной форме, проверка значения nonce при обработке формы и обновление nonce значения при каждой загрузке страницы — это основные возможности, которые предоставляет функция wp_nonce_field().

Связанные элементы

  • Функция wp_create_nonce(): генерирует и возвращает уникальный nonce (число, используемое для проверки подлинности данных) для указанного действия.
  • Функция wp_verify_nonce(): проверяет подлинность переданного nonce для указанного действия.
  • Функция wp_nonce_url(): добавляет nonce к URL-адресу.
  • Функция wp_referer_field(): выводит скрытое поле с URL-адресом, с которого была отправлена форма, для использования при проверке подлинности.
  • Функция check_admin_referer(): проверяет подлинность nonce и URL-адреса, с которого была отправлена форма, в административной части сайта.
  • Функция check_ajax_referer(): проверяет подлинность nonce и URL-адреса, с которого был отправлен AJAX-запрос.
Обсуждение