Opciones Temporales en WordPress: ¿Nuestra Mejor Opción?
Cuando se trata de programación, la idea de valores temporales o variables temporales o cualquier forma de almacenar datos temporalmente en la memoria no es nada nuevo.
Pero cuando trabajamos con WordPress, que no tiene estado, no siempre tenemos ese lujo. Es decir, no se trata simplemente de, por ejemplo, agregar algo a la sesión actual, leerlo y luego eliminarlo cuando hayamos terminado.
Y ahí es cuando he estado pensando más y más en la idea de las opciones temporales, a falta de un término mejor, por supuesto. Es decir, cada vez que necesito almacenar un valor de una sola carga de página, o solicitud, para leer en otra carga de página u otra solicitud, arrojaré temporalmente el valor en la tabla de opciones.
Opciones temporales: un ejercicio y representación a través de bocetos rudimentarios
¿Es eso descuidado? Quizás. ¿Tenemos muchas otras opciones? Depende de la cantidad de tecnología de navegador moderna que queramos usar. Sin embargo, ese no es el punto de esta publicación.
El punto es que debido a la forma en que funciona WordPress, me pregunto si nuestra mejor estrategia actual para mantener los valores temporales que es más compatible en todas las instalaciones es agregar temporalmente un valor en la tabla de opciones, leerlo y luego eliminarlo una vez que esté sido recuperado?
Nuestras opciones para opciones temporales
Personalmente, no tengo una opinión firme sobre si esto es algo malo o no. Si es la naturaleza de cómo funciona la base sobre la que estoy trabajando en una solución, entonces la aceptaré.
Entonces, primero, así es como normalmente lo hago dentro de WordPress:
1 Crear una opción temporal
Primero, configuré una función que está conectada a update_option. Esto permite ver la opción que se está actualizando, su valor anterior y su valor nuevo.
<?php
public function init() {
add_action(
'update_option',
array( $this, 'manage_temporary_option' ),
10, 3
);
}
En la función, puedo mirar y ver si se está guardando una opción específica. Si no, entonces simplemente puedo ignorarlo; de lo contrario, puedo echarle un vistazo y comenzar a trabajar con una opción temporal.
<?php
public function manage_temporary_option( $option_name, $old_value, $new_value) {
if ('an_irrelevant_option' !== $option_name) {
return;
}
$url = 'page-from-which-we-expect-to-come.php';
if ($url === $_SERVER['REQUEST_URI']) {
update_option(
'our_temporary_option',
$new_value
);
}
}
Pero, ¿qué sostendría la opción temporal?
2 Una opción para opciones temporales
Digamos que tiene una opción en un complemento que está alternado. Tal vez requiera que el usuario ingrese cierta información antes de continuar con el resto del proceso.
Caso en cuestión: supongamos que está trabajando en una experiencia de pago y desea obligar a los usuarios a crear una cuenta, pero hay una opción que permite a los clientes pagar sin crear una cuenta.
Una implementación que podríamos usar es esta:
- Antes de que se cargue la página de pago, mira si el usuario puede pagar como invitado.
- Si es así, almacene el valor original de la opción en una opción temporal.
- Cambie el valor original para que requiera que creen una cuenta.
- Una vez que finalice el proceso de pago, copie el valor de la opción temporal a la opción original.
- Eliminar la opción temporal.
Es similar a todo el ejercicio en C cuando necesitas un puntero para intercambiar dos números (para quien lo recuerde o quien lo haya hecho).
¿Nuestra mejor opción?
El proceso descrito anteriormente es solo un ejemplo y no pretende ser la forma definitiva de mantener valores temporales. En segundo lugar, el ejemplo de pago no pretende asociar esta publicación con el comercio electrónico.
En cambio, está destinado a proporcionar un caso de uso concreto para cuándo es útil almacenar opciones temporales y cómo podemos querer hacerlo.
Entonces, la pregunta original permanece: Dada la forma en que funciona WordPress, la falta de sesiones y sin garantizar ciertas características del navegador como localStorage, ¿son las opciones temporales en la tabla de opciones nuestra mejor manera de hacerlo?