Фатальная ошибка при вызове wp_create_nonce в options-init.php

Я разрабатываю плагин WordPress, используя шаблон WordPress шаблон. Кроме того, я использую Redux Framework в качестве структуры параметров. Я загружаю options-init.php в функцию load_dependencies() основного включаемого файла.

Все отлично работает Однако при вызове wp_create_nonce в options-init.php я получаю фатальную ошибку: Uncaught Error: вызов неопределенной функции wp_create_nonce()

Почему это и как это решить?

4 ответа

Решение

Я сам нашел решение, хотя не уверен, что оно правильное / лучшая практика.

Я переместил включение структуры redux в отдельный класс, который я вызываю через ловушку действия на plugins_loaded

// Инициируем Redux Framework $this->loader->add_action( 'plugins_loaded', $plugin_admin_redux, 'init_redux_framework');

Внутри метода init_redux_framework() я просто поместил требование один раз в admin-init.php

Интересно, что добавление его в 'init' вместо 'plugins_loaded' было слишком поздно для инициализации Redux.

wp_create_nonce() - это подключаемая функция, загружаемая после загрузки подключаемых модулей. ДО вызова файла pluggable.php:

require_once( ABSPATH . 'wp-includes/pluggable.php' );

Благодарю.

wp_create_nonce() подключаемая функция, загружаемая после загрузки плагинов

Обязательно вызовите свой метод класса на правильном хуке, 'init' (или позже) - хорошее место: как только ваша функция выводит что-то (форму), нет причины запускать ее раньше.

wp_verify_nonce() получает 2 аргумента:

$nonce
$action

1-й аргумент - это одноразовый номер, полученный из запроса

По факту, wp_verify_nonce() должны быть использованы так:

// here I assume that the form is submitted using 'post' as method
$verify = wp_verify_nonce($_POST['message-send']);

Таким образом, первый аргумент, передаваемый в wp_verify_nonce() - это именно то значение, которое присутствует в скрытом поле.

2-й аргумент: wp_create_nonce() метод

Что касается второго аргумента, это зависит от того, как вы строите одноразовое значение.

Например, если вы сделали:

<?php $nonce = wp_create_nonce( 'custom-action' ); ?>
<input type="hidden" name="message-send" value="<?php echo $nonce ?>" />

Тогда вам нужно сделать:

$verify = wp_verify_nonce( $_POST['message-send'], 'custom-action' );

Итак, второй аргумент - это то, что использовалось в качестве аргумента для wp_create_nonce(),

2-й аргумент: wp_nonce_field() метод Если вы создали одноразовый номер с помощью wp_nonce_field(), например:

wp_nonce_field( 'another_action', 'message-send' );

Затем вам нужно проверить одноразовый номер так:

$verify = wp_verify_nonce( $_POST['message-send'], 'another_action' );

Итак, на этот раз действие - это то, что передано в качестве первого аргумента wp_nonce_field(),

Резюме: пройти wp_verify_nonce() Для проверки необходимо передать в функцию 2 аргумента: один - значение в скрытом поле nonce, другой - действие и зависит от того, как было создано значение nonce.

Зачем тебе wp_create_nonce() внутри плагин?

Одноразовый номер обычно включается в скрытое поле формы HTML или как часть URL-адреса и, следовательно, отправляется с запросом путем отправки поля формы или посещения ссылки:

<?php
// Create an nonce for a link.
// We pass it as a GET parameter.
// The target page will perform some action based on the 'do_something' parameter.
$nonce = wp_create_nonce( 'my-nonce' );
?>
<a href='myplugin.php?do_something=some_action&_wpnonce=<?php echo $nonce; ?>'>Do some action</a>

А внутри файлов плагинов вы можете проверить nounce:

wp_verify_nonce( $nonce, 'my-nonce' );
Другие вопросы по тегам