Utilizzo di un WordPress Hook per l’aggiornamento delle opzioni
L’aggiornamento delle opzioni all’interno dell’amministratore di WordPress è semplice, giusto? Si tratta di compilare un campo di testo, selezionare una casella o scambiare un pulsante di opzione, quindi fare clic su Salva.
Ma supponiamo che sia necessario impostare un hook che si attivi che aggiorni anche un’opzione correlata secondaria ogni volta che ne viene attivata una.
Ad esempio, data un’opzione rappresentata da una casella di controllo, supponiamo di voler impostare un’opzione nel database ogni volta che la casella di controllo è deselezionata e quindi eliminarla ogni volta che tale opzione è impostata.
C’è un’azione specifica per farlo che lo rende abbastanza facile.
Un gancio per l’aggiornamento delle opzioni
Prima di entrare in qualsiasi codice su come farlo, dì che l’opzione update_option data è stata scattata. Fatto ciò, dovrai configurare una richiamata che si attiva ogni volta che viene impostata l’opzione.
A ciò si aggiungono le seguenti considerazioni:
- L’opzione in questione è stata attivata?
- In tal caso, l’opzione è stata impostata (supponendo che fosse una casella di controllo)?
- In caso negativo, hai un piano su come gestire quel caso?
Supponendo che tutto quanto sopra sia stato risolto, avrai bisogno di una funzione per definire l’azione e una funzione che implementi il callback. Nel mio esempio, utilizzerò la programmazione orientata agli oggetti, ma può essere eseguita altrettanto bene nella programmazione procedurale.
Nel mio esempio, utilizzerò la programmazione orientata agli oggetti, ma può essere eseguita altrettanto bene nella programmazione procedurale.
Un esempio
Supponiamo che tu abbia un’opzione chiamata user_is_disguised e che tu abbia un altro valore nel database chiamato user_is_superman.
Ogni volta che user_is_disguised è impostato su yet, user_is_superman dovrebbe essere impostato su false. E poi quando user_is_disguised è impostato su false, user_is_superman dovrebbe essere impostato su true.
Alla fine, i valori si scambiano. Ecco un esempio di come farlo. Per prima cosa, dobbiamo impostare l’hook :
<?php
/**
* Initializes the defined actions.
*/
public function init() {
add_action(
'update_option',
array( $this, 'toggle_other_option' ),
10, 3
);
}
Quindi dobbiamo implementare la funzione per lo scambio dei valori:
<?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 );
}
}
E questo dovrebbe occuparsene.
Una nota sugli argomenti
Si noti che il callback accetta tre argomenti (che sono anche definiti nella documentazione collegata sopra). Questi sono utili in altre implementazioni meno artificiose.
Ma forse una delle cose più importanti da eliminare dal codice sopra è controllare il nome dell’opzione nella richiamata prima di attivare o disattivare i valori.