Использование хука WordPress для обновления параметров
Обновить параметры в панели администратора WordPress очень просто, верно? Это вопрос заполнения текстового поля, установки флажка или переключения переключателя, а затем нажатия кнопки «Сохранить».
Но предположим, что вам нужно настроить ловушку, которая срабатывает и также обновляет вторичную связанную опцию всякий раз, когда она переключается.
Например, для параметра, представленного флажком, предположим, что вы хотите установить параметр в базе данных, когда флажок не установлен, а затем удалить его, когда указанный параметр установлен.
Специально для этого есть действие, которое делает это довольно легко.
Крюк для обновления опций
Прежде чем переходить к коду, как это сделать, скажите, что данная опция update_option сработала. После этого вам нужно настроить обратный вызов, который срабатывает всякий раз, когда установлена опция.
Кроме того, есть следующие соображения:
- Была ли включена рассматриваемая опция?
- Если да, то был ли установлен этот параметр (при условии, что это флажок)?
- Если нет, есть ли у вас план действий в этом случае?
Предполагая, что все вышеперечисленное было выяснено, вам понадобится функция для определения действия и функция, реализующая обратный вызов. В моем примере я буду использовать объектно-ориентированное программирование, но это можно сделать и в процедурном программировании.
В моем примере я буду использовать объектно-ориентированное программирование, но это можно сделать и в процедурном программировании.
Пример
Допустим, у вас есть параметр с именем user_is_disguised, и у вас есть другое значение в базе данных с именем user_is_superman.
Всякий раз, когда для user_is_disguised установлено значение false, для user_is_superman должно быть установлено значение false. И затем, когда для user_is_disguised установлено значение false, для user_is_superman должно быть установлено значение true.
В конечном итоге ценности меняются местами. Вот пример, как это сделать. Во- первых, нам нужно настроить хук :
<?php
/**
* Initializes the defined actions.
*/
public function init() {
add_action(
'update_option',
array( $this, 'toggle_other_option' ),
10, 3
);
}
Затем нам нужно реализовать функцию замены значений:
<?php
/**
* If the given option_name is `user_is_disguised`, then toggles another option
* in the database - `user_is_superman` - based on the specified values.
*
* @param string $option_name The name of the value being updated.
* @param mixed $old_value The previous value of the option before updating it.
* @param mixed $new_value The value of the option now that it's been updated.
*/
public function toggle_other_option( $option_name, $old_value, $new_value) {
// If 'user_is_disguised' is not being changed, then don't worry about it.
if (0 !== strcasecmp( $option_name, 'user_is_disguised')) {
return;
}
/* If 'user_is_disguised' is being set, then remove the Superman value; otherwise,
* set it to true (but don't worry about autoloading it).
*/
if ('1' === $new_value) {
delete_option( 'user_is_superman' );
} else {
update_option( 'user_is_superman', true, false );
}
}
И это должно позаботиться об этом.
Примечание об аргументах
Обратите внимание, что обратный вызов принимает три аргумента (которые также определены в документации, указанной выше). Они полезны в других, менее надуманных реализациях.
Но, возможно, одна из самых важных вещей, которую следует вынести из приведенного выше кода, заключается в том, что вы проверяете имя параметра в обратном вызове перед переключением каких-либо значений.