Вопрос или проблема
У меня есть форма, которая делает
<form method="post" action="options.php">
.........
<input type="submit" class="button-primary" value="<?php _e( 'Сохранить изменения', 'bsp_style_settings' ); ?>" />
У меня есть все настройки регистрации/admin_init и т.д., и всё работает хорошо, данные сохраняются в части WP_Options базы данных – отлично!
Все, что я хочу сделать, это добавить дополнительную функцию, которая также будет выполняться при отправке. Так просто вызов, чтобы сказать
function also_do () {
xxxx
}
так что эта функция также выполняется, когда нажата кнопка “Сохранить”.
Есть ли предложения по решению этой задачи?
Вы можете просто проверить, обновлены ли настройки, и вызвать функцию.
В верхней части страницы, которая отображает форму настроек:
if ( isset( $_GET['settings-updated'] ) && $_GET['settings_updated'] == true ) {
your_custom_function();
}
Затем определите пользовательскую функцию в вашем functions.php или добавьте её в класс.
Вы можете использовать хуки updated_option
.
do_action( 'updated_option', string $option, mixed $old_value, mixed $value )
Срабатывает после того, как значение параметра было успешно обновлено.
Существует также хук update_option
, который срабатывает перед обновлением параметра.
Ответ или решение
Чтобы добавить дополнительную функцию, которая будет выполняться при отправке формы options.php
в WordPress, можно использовать несколько методов. Ниже приведен детальный процесс реализации этого функционала, который гарантированно будет работать корректно.
1. Использование параметра settings-updated
Первым шагом, который можно предпринять, является проверка наличия параметра settings-updated
, который WordPress добавляет к URL после успешного сохранения настроек. Это позволит вам вызывать вашу дополнительную функцию сразу после обновления настроек.
Шаги:
- Откройте файл, который генерирует вашу форму настроек (обычно это
admin_settings_page.php
в вашем плагине или теме). - В начале файла, где отображается такая форма, добавьте условие для проверки:
if ( isset( $_GET['settings-updated'] ) && $_GET['settings-updated'] == true ) {
also_do(); // Вызываем вашу функцию
}
- Определите функцию
also_do
в вашем файле:
function also_do() {
// Ваш код здесь
}
2. Использование хуков updated_option
Еще одним подходом является использование хука updated_option
, который WordPress предоставляет для выполнения кода сразу после успешного обновления значения опции в базе данных.
Шаги:
- Также в вашем файле настроек добавьте следующий код:
add_action('updated_option', 'your_custom_function', 10, 3);
- Определите функцию
your_custom_function
, которая будет выполняться каждый раз, когда обновляется опция:
function your_custom_function($option, $old_value, $new_value) {
if ($option == 'ваша_опция') { // Замените на ту опцию, которую вы обновляете
also_do(); // Вызываем дополнительную функцию
}
}
- Запишите вашу дополнительную функцию
also_do
, как упоминалось ранее.
3. Итоги и преимущества
Выбранный вами метод зависит от контекста вашего проекта и конкретных требований:
- Использование параметра
settings-updated
— это простой и прямолинейный способ, который хорошо работает в большинстве случаев. - Хук
updated_option
предоставляет большую гибкость и может быть использован для выполнения кода в ответ на изменение любых опций, а не только тех, что связаны с вашей конкретной формой.
Заключение
Используя один из описанных методов, вы сможете без проблем интегрировать дополнительную функциональность в процесс сохранения настроек в вашей WordPress-форме. Обязательно протестируйте все изменения на локальном сервере или в тестовой среде, чтобы избежать неожиданных проблем на рабочем сайте.