Usar un gancho de WordPress para actualizar las opciones
Actualizar las opciones dentro del administrador de WordPress es simple, ¿verdad? Es cuestión de completar un campo de texto, marcar una casilla o cambiar un botón de opción y luego hacer clic en Guardar.
Pero supongamos que necesita configurar un gancho que se activa y que también actualiza una opción secundaria relacionada cada vez que se activa una.
Por ejemplo, dada una opción representada por una casilla de verificación, digamos que desea establecer una opción en la base de datos siempre que la casilla de verificación no esté marcada y luego eliminarla cada vez que se establezca dicha opción.
Hay una acción específica para hacer esto que lo hace bastante fácil.
Un gancho para actualizar las opciones
Antes de entrar en cualquier código sobre cómo hacer esto, diga que la opción de actualización dada se ha disparado. Una vez hecho, deberá configurar una devolución de llamada que se activa cada vez que se establece la opción.
Además de eso, existen las siguientes consideraciones:
- ¿Se activó la opción en cuestión?
- Si es así, ¿estaba configurada la opción (asumiendo que era una casilla de verificación)?
- Si no, ¿tiene un plan sobre cómo manejar ese caso?
Suponiendo que se haya resuelto todo lo anterior, necesitará una función para definir la acción y una función que implemente la devolución de llamada. En mi ejemplo, usaré la programación orientada a objetos, pero se puede hacer igual de bien en la programación procedimental.
En mi ejemplo, usaré la programación orientada a objetos, pero se puede hacer igual de bien en la programación procedimental.
Un ejemplo
Digamos que tiene una opción llamada user_is_disguised, y tiene otro valor en la base de datos llamado user_is_superman.
Siempre que user_is_disguised se establezca en yet, user_is_superman debe establecerse en false. Y luego, cuando user_is_disguised se establece en falso, user_is_superman debe establecerse en verdadero.
En última instancia, los valores se intercambian. Aquí hay un ejemplo de cómo hacerlo. Primero, necesitamos configurar el gancho :
<?php
/**
* Initializes the defined actions.
*/
public function init() {
add_action(
'update_option',
array( $this, 'toggle_other_option' ),
10, 3
);
}
Luego necesitamos implementar la función para intercambiar los valores:
<?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 );
}
}
Y eso debería solucionarlo.
Una nota sobre los argumentos
Tenga en cuenta que la devolución de llamada acepta tres argumentos (que también se definen en la documentación vinculada anteriormente). Estos son útiles en otras implementaciones menos artificiales.
Pero quizás una de las cosas más importantes que se deben quitar del código anterior es que verifique el nombre de la opción en la devolución de llamada antes de alternar cualquier valor.