wp_nonce_field()

Создаёт скрытое поле <input type="hidden" />, содержащее защитный ключ nonce. Также позволяет добавить второе скрытое поле с реферером.

Читайте, что такое одноразовые числа (nonces) и для чего они нужны в этом уроке.

wp_nonce_field( $action = -1, $name = '_wpnonce', $referer = true, $echo = true )
$action
(строка|целое) Ключ, описывающий действие, на основе которого будет создано одноразовое число. Обратите внимание, что рекомендуется подробно описывать действие. Например, если вы хотите сохранить настройки определённого поста, то значение $action может быть например 'save-post-' . $post_id.
$name
(строка) Атрибут name скрытого поля.
$referer
(логическое) Нужно ли добавлять ещё одно скрытое поле «_wp_http_referer», содержащее $_SERVER['REQUEST_URI'] текущей страницы.
$echo
(логическое) true – вывести поле (по умолчанию), false – возвратить.

Пример

В качестве примера давайте выведу форму и туда сразу же добавлю скрытое поле с одноразовым числом nonce.

Ну например можем предположить, что мы обновляем какой-то пост во фронтенде.

echo '<form action="save.php" method="POST">
	<!-- тут будут ещё какие-либо другие поля ... -->
	<input type="hidden" name="post_id" value="' . $post_id . '" />
	' . wp_nonce_field( 'save-post-' . $post_id, 'true_nonce', true, false ) . '
</form>';

И соответственно валидация одноразового числа в файле save.php будет выглядеть примерно следующим образом:

if( isset( $_POST[ 'true_nonce' ] ) && wp_verify_nonce( $_POST[ 'true_nonce' ], 'save-post-' . $_POST[ 'post_id' ] ) {
	// проверка прошла успешно, делаем дела
}

Для проверки мы использовали функцию wp_verify_nonce(), ну и реферер вы можете проверить, взяв его из $_POST[ '_wp_http_referer' ].

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Если вам нужна помощь с сайтом или разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда будем рады вам помочь!

Оставить комментарий

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, если же код – меньше одной строчки, то можно и в <code></code>.