Aktualizowanie opcji w panelu administratora WordPressa jest proste, prawda? Jest to kwestia wypełnienia pola tekstowego, zaznaczenia pola lub zamiany przycisku opcji, a następnie kliknięcia Zapisz.
Załóżmy jednak, że musisz skonfigurować podpięcie, które uruchamia się, a także aktualizuje drugorzędną, powiązaną opcję, gdy jedna jest przełączana.
Na przykład, biorąc pod uwagę opcję reprezentowaną przez pole wyboru, powiedzmy, że chcesz ustawić opcję w bazie danych, gdy pole wyboru jest odznaczone, a następnie usuwać ją, gdy ta opcja jest ustawiona.
Specjalnie do tego służy akcja, która sprawia, że jest to całkiem proste.
Hak do aktualizacji opcji
Zanim przejdziesz do jakiegokolwiek kodu, jak to zrobić, powiedz, że dana opcja update_option została wyzwolona. Po wykonaniu tej czynności musisz skonfigurować wywołanie zwrotne, które będzie uruchamiane za każdym razem, gdy opcja jest ustawiona.
Oprócz tego należy wziąć pod uwagę następujące kwestie:
- Czy dana opcja została przełączona?
- Jeśli tak, czy opcja była ustawiona (zakładając, że było to pole wyboru)?
- Jeśli nie, czy masz plan, jak poradzić sobie z tą sprawą?
Zakładając, że wszystko powyżej zostało wyjaśnione, będziesz potrzebować funkcji do zdefiniowania akcji i funkcji, która implementuje wywołanie zwrotne. W moim przykładzie będę używał programowania obiektowego, ale można to zrobić równie dobrze w programowaniu proceduralnym.
W moim przykładzie będę używał programowania obiektowego, ale można to zrobić równie dobrze w programowaniu proceduralnym.
Przykład
Załóżmy, że masz opcję o nazwie user_is_disguised i masz inną wartość w bazie danych o nazwie user_is_superman.
Ilekroć user_is_disguised jest ustawiony na jeszcze, wtedy user_is_superman powinien być ustawiony na false. A następnie, gdy user_is_disguised jest ustawione na false, user_is_superman powinno być ustawione na true.
Ostatecznie wartości się zamieniają. Oto przykład, jak to zrobić. Najpierw musimy ustawić hak :
<?php
/**
* Initializes the defined actions.
*/
public function init() {
add_action(
'update_option',
array( $this, 'toggle_other_option' ),
10, 3
);
}
Następnie musimy zaimplementować funkcję zamiany wartości:
<?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 );
}
}
I to powinno się tym zająć.
Uwaga na temat argumentów
Zauważ, że wywołanie zwrotne akceptuje trzy argumenty (które są również zdefiniowane w dokumentacji, do której link znajduje się powyżej). Są one przydatne w innych, mniej wymyślnych implementacjach.
Ale być może jedną z najważniejszych rzeczy, które należy usunąć z powyższego kodu, jest sprawdzenie nazwy opcji w wywołaniu zwrotnym przed przełączeniem jakichkolwiek wartości.