{"id":228555,"date":"2022-10-23T10:05:00","date_gmt":"2022-10-23T07:05:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=228555"},"modified":"2022-11-09T02:59:42","modified_gmt":"2022-11-08T23:59:42","slug":"opciones-temporales-en-wordpress-nuestra-mejor-opcion","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/opciones-temporales-en-wordpress-nuestra-mejor-opcion\/","title":{"rendered":"Opciones Temporales en WordPress: \u00bfNuestra Mejor Opci\u00f3n?"},"content":{"rendered":"\n<p>Cuando se trata de programaci\u00f3n, la idea de valores temporales o variables temporales o cualquier forma de almacenar datos temporalmente en la memoria no es nada nuevo.<\/p>\n<p>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 <a href=\"https:\/\/php.net\/manual\/en\/features.sessions.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sesi\u00f3n<\/a> actual, leerlo y luego eliminarlo cuando hayamos terminado.<\/p>\n<p>Y ah\u00ed es cuando he estado pensando m\u00e1s y m\u00e1s en la idea de las opciones temporales, a falta de un t\u00e9rmino mejor, por supuesto. Es decir, cada vez que necesito almacenar un valor de una sola carga de p\u00e1gina, o solicitud, para leer en otra carga de p\u00e1gina u otra solicitud, arrojar\u00e9 temporalmente el valor en <a href=\"https:\/\/codex.wordpress.org\/Database_Description#Table:_wp_options\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">la tabla de opciones<\/a>.<\/p>\n<p>Opciones temporales: un ejercicio y representaci\u00f3n a trav\u00e9s de bocetos rudimentarios<\/p>\n<p>\u00bfEs eso descuidado? Quiz\u00e1s. \u00bfTenemos muchas otras opciones? Depende de la cantidad de tecnolog\u00eda de navegador moderna que queramos usar. Sin embargo, ese no es el punto de esta publicaci\u00f3n.<\/p>\n<p>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\u00e1s compatible en todas las instalaciones es agregar temporalmente un valor en la tabla de opciones, leerlo y luego eliminarlo una vez que est\u00e9 sido recuperado?<\/p>\n<h2>Nuestras opciones para opciones temporales<\/h2>\n<p>Personalmente, no tengo una opini\u00f3n firme sobre si esto es algo malo o no. Si es la naturaleza de c\u00f3mo funciona la base sobre la que estoy trabajando en una soluci\u00f3n, entonces la aceptar\u00e9.<\/p>\n<p>Entonces, primero, as\u00ed es como normalmente lo hago dentro de WordPress:<\/p>\n<h3>1 Crear una opci\u00f3n temporal<\/h3>\n<p>Primero, configur\u00e9 una funci\u00f3n que est\u00e1 conectada a <a href=\"https:\/\/codex.wordpress.org\/Function_Reference\/update_option\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">update_option<\/a>. Esto permite ver la opci\u00f3n <a href=\"https:\/\/gist.github.com\/tommcfarlin\/09c436b55f4c5eecc4187d7fc438ea40#file-00-init-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">que se est\u00e1 actualizando<\/a>, su valor anterior y su valor nuevo.<\/p>\n<pre><code>&lt;?php\n\npublic function init() {\n\n    add_action(\n        'update_option',\n        array( $this, 'manage_temporary_option' ),\n        10, 3\n    );\n}<\/code><\/pre>\n<p>En la funci\u00f3n, puedo mirar y ver si se est\u00e1 guardando una opci\u00f3n espec\u00edfica. Si no, entonces simplemente puedo ignorarlo; de lo contrario, puedo echarle un vistazo y comenzar a trabajar con <a href=\"https:\/\/gist.github.com\/tommcfarlin\/09c436b55f4c5eecc4187d7fc438ea40#file-01-manage-temporary-option-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">una opci\u00f3n temporal<\/a>.<\/p>\n<pre><code>&lt;?php\n\npublic function manage_temporary_option( $option_name, $old_value, $new_value) {\n\n    if ('an_irrelevant_option' !== $option_name) {\n        return;\n    }\n\n    $url = 'page-from-which-we-expect-to-come.php';\n    if ($url === $_SERVER['REQUEST_URI']) {\n\n        update_option(\n            'our_temporary_option',\n            $new_value\n        );\n    }\n}\n<\/code><\/pre>\n<p>Pero, \u00bfqu\u00e9 sostendr\u00eda la opci\u00f3n temporal?<\/p>\n<h3>2 Una opci\u00f3n para opciones temporales<\/h3>\n<p>Digamos que tiene una opci\u00f3n en un complemento que est\u00e1 alternado. Tal vez requiera que el usuario ingrese cierta informaci\u00f3n antes de continuar con el resto del proceso.<\/p>\n<p>Caso en cuesti\u00f3n: supongamos que est\u00e1 trabajando en una experiencia de pago y desea obligar a los usuarios a crear una cuenta, pero hay una opci\u00f3n que permite a los clientes pagar sin crear una cuenta.<\/p>\n<p>Una implementaci\u00f3n que podr\u00edamos usar es esta:<\/p>\n<ol>\n<li>Antes de que se cargue la p\u00e1gina de pago, mira si el usuario puede pagar como invitado.<\/li>\n<li>Si es as\u00ed, almacene el valor original de la opci\u00f3n en una opci\u00f3n temporal.<\/li>\n<li>Cambie el valor original para que requiera que creen una cuenta.<\/li>\n<li>Una vez que finalice el proceso de pago, copie el valor de la opci\u00f3n temporal a la opci\u00f3n original.<\/li>\n<li>Eliminar la opci\u00f3n temporal.<\/li>\n<\/ol>\n<p>Es similar a todo el ejercicio en C cuando necesitas un puntero para <a href=\"http:\/\/www.c4learn.com\/c-programs\/interchanging-values-of-two-variables.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">intercambiar dos n\u00fameros<\/a> (para quien lo recuerde o quien lo haya hecho).<\/p>\n<h2>\u00bfNuestra mejor opci\u00f3n?<\/h2>\n<p>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\u00f3n con el comercio electr\u00f3nico.<\/p>\n<p>En cambio, est\u00e1 destinado a proporcionar un caso de uso concreto para cu\u00e1ndo es \u00fatil almacenar opciones temporales y c\u00f3mo podemos querer hacerlo.<\/p>\n<p>Entonces, la pregunta original permanece: Dada la forma en que funciona WordPress, la falta de sesiones y sin garantizar ciertas caracter\u00edsticas del navegador como localStorage, \u00bfson las opciones temporales en la tabla de opciones nuestra mejor manera de hacerlo?<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dado c\u00f3mo funciona WordPress, la falta de sesiones y la falta de funciones del navegador, \u00bfson las opciones temporales en la tabla de opciones nuestra mejor opci\u00f3n?<\/p>\n","protected":false},"author":1,"featured_media":221144,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[892,810,716,747,914,840,861],"tags":[1172],"class_list":["post-228555","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-complementos","category-desarrollador","category-fuente-abierta","category-otro","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228555","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=228555"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/228555\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/221144"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=228555"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=228555"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=228555"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}