Utiliser un hook WordPress pour mettre à jour les options
La mise à jour des options dans l’administration WordPress est simple, n’est-ce pas? Il s’agit de remplir un champ de texte, de cocher une case ou d’échanger un bouton radio puis de cliquer sur Enregistrer.
Mais disons que vous devez configurer un hook qui se déclenche et qui met également à jour une option secondaire associée chaque fois qu’une option est activée.
Par exemple, étant donné une option représentée par une case à cocher, supposons que vous souhaitiez définir une option dans la base de données chaque fois que la case est décochée, puis la supprimer chaque fois que cette option est définie.
Il y a une action spécifiquement pour faire cela qui le rend assez facile.
Un crochet pour mettre à jour les options
Avant d’entrer dans n’importe quel code pour savoir comment faire cela, dites que le update_option donné a été déclenché. Une fois terminé, vous devrez configurer un rappel qui se déclenche chaque fois que l’option est définie.
En plus de cela, il y a les considérations suivantes :
- L’option en question a-t-elle été activée ?
- Si oui, l’option était-elle définie (en supposant qu’il s’agissait d’une case à cocher) ?
- Si non, avez-vous un plan pour gérer ce cas ?
En supposant que tout ce qui précède a été compris, vous aurez besoin d’une fonction pour définir l’action et d’une fonction qui implémente le rappel. Dans mon exemple, j’utiliserai la programmation orientée objet, mais cela peut aussi bien se faire en programmation procédurale.
Dans mon exemple, j’utiliserai la programmation orientée objet, mais cela peut aussi bien se faire en programmation procédurale.
Un exemple
Supposons que vous ayez une option appelée user_is_disguised et que vous ayez une autre valeur dans la base de données appelée user_is_superman.
Chaque fois que user_is_disguised est défini sur yet, alors user_is_superman doit être défini sur false. Et puis, lorsque user_is_disguised est défini sur false, user_is_superman doit être défini sur true.
En fin de compte, les valeurs s’échangent. Voici un exemple comment le faire. Tout d’abord, nous devons configurer le crochet :
<?php
/**
* Initializes the defined actions.
*/
public function init() {
add_action(
'update_option',
array( $this, 'toggle_other_option' ),
10, 3
);
}
Ensuite, nous devons implémenter la fonction pour échanger les valeurs :
<?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 );
}
}
Et cela devrait s’en occuper.
Une note sur les arguments
Notez que le rappel accepte trois arguments (qui sont également définis dans la documentation liée ci-dessus). Ceux-ci sont utiles dans d’autres implémentations moins artificielles.
Mais peut-être que l’une des choses les plus importantes à retenir du code ci-dessus est que vous vérifiez le nom de l’option dans le rappel avant de basculer les valeurs.