Використання хука WordPress для оновлення параметрів
Оновити параметри в адміністраторі WordPress просто, чи не так? Потрібно заповнити текстове поле, поставити прапорець або змінити перемикач, а потім натиснути «Зберегти».
Але припустімо, що вам потрібно налаштувати хук, який спрацьовує, а також оновлює вторинну пов’язану опцію щоразу, коли її перемикають.
Наприклад, для параметра, представленого прапорцем, припустимо, що ви хочете встановити параметр у базі даних щоразу, коли прапорець знятий, а потім видалити його щоразу, коли цей параметр установлено.
Для цього існує спеціальна дія, яка робить це досить простим.
Гачок для оновлення параметрів
Перш ніж приступати до будь-якого коду, як це зробити, скажіть, що даний update_option спрацював. Зробивши, вам потрібно буде налаштувати зворотний виклик, який запускатиметься щоразу, коли встановлено цей параметр.
Крім того, є такі міркування:
- Чи перемикали спірну опцію?
- Якщо так, чи встановлено цей параметр (якщо це був прапорець)?
- Якщо ні, то чи є у вас план, як вирішити цю справу?
Якщо припустити, що все вищесказане було з’ясовано, вам знадобиться функція для визначення дії та функція, яка реалізує зворотний виклик. У моєму прикладі я буду використовувати об’єктно-орієнтоване програмування, але це також можна зробити в процедурному програмуванні.
У моєму прикладі я буду використовувати об’єктно-орієнтоване програмування, але це також можна зробити в процедурному програмуванні.
Приклад
Скажімо, у вас є параметр під назвою user_is_disguised, і у вас є інше значення в базі даних під назвою user_is_superman.
Щоразу, коли для параметра user_is_disguised встановлено значення still, для параметра 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 );
}
}
І про це слід подбати.
Примітка про аргументи
Зауважте, що зворотній виклик приймає три аргументи (які також визначені в документації, посилання на яку наведено вище). Вони корисні в інших, менш надуманих реалізаціях.
Але, мабуть, одна з найважливіших речей, які потрібно взяти з коду вище, це те, що ви перевіряєте назву опції у зворотному виклику перед перемиканням будь-яких значень.