¿Cómo almacenar y recibir variables en sesiones de WP?
Tengo un formulario con algunas casillas de verificación, campos de entrada y selectores que muestran lo que el usuario quiere a través de una llamada ajax. El problema es que cuando el usuario hace clic en el elemento y se muestra la página de detalles, y luego decide volver a la página anterior, necesita hacer clic y seleccionar su elección previa nuevamente.
Me gustaría hacer que WP almacene todas las opciones en la sesión cuando se hace clic en el botón de la página de detalles y guarde la información actual en la sesión, y luego cuando visite la página nuevamente, los valores se verificarán en las sesiones y se establecerán si se encuentra alguno.
¿Se puede hacer esto en WP?
Si es así, ¿cómo?
Simplifiquemos esto y digamos que tenemos algo como esto en nuestro formulario:
<input class="car_color" type="checkbox" name="car_color" value="1" />
<input class="car_color" type="checkbox" name="car_color" value="2" />
<input class="car_color" type="checkbox" name="car_color" value="8" />
<input class="car_color" type="checkbox" name="car_color" value="4" />
<input class="car_color" type="checkbox" name="car_color" value="6" />
No uso botón de envío en mi formulario, se maneja vía AJAX al cambiar el input.
Y en mis resultados obtenidos vía ajax tengo un enlace a la página de detalles:
<a class="detail-info-link" href="<?php echo $url ?>">
¿Alguna idea de cómo puedo almacenar mis valores en la Sesión y llamarlos cuando se vuelve a visitar/recargar/botón atrás en el navegador?
Necesito poder leer la información almacenada en la sesión y usarla vía ¿Javascript? y activar mi función de búsqueda vía ajax que ya está funcionando bien.
Solo necesito almacenar (probablemente antes de ir al $link en href del botón de detalles y leer y enviar variables de sesión (si existen).
Las sesiones no están habilitadas en WordPress por defecto, si deseas activar las sesiones de PHP añade esto al principio de tu functions.php
:
if (!session_id()) {
session_start();
}
Ahora puedes usar $_SESSION['tu-variable'] = 'tu-valor';
para establecer una variable de sesión. Echa un vistazo a la documentación de PHP sobre sesiones.
Actualización:
Había una segunda respuesta, que, en mi opinión, también tenía valor - desafortunadamente fue eliminada, estoy volviendo a agregar la información aquí. La respuesta hacía referencia a WP Session Manager, un plugin escrito por @eamann como una solución alternativa.
He leído algunas cosas sobre el plugin, pero nunca lo he usado porque - hasta ahora - me he mantenido con las sesiones de PHP - nunca he tenido el problema de no poder usarlas. Aquí hay un comentario/declaración del propio autor del plugin que encontré sobre algunas posibles ventajas.

Quizás no existan sesiones tradicionales en WordPress... sin embargo, WordPress conoce el concepto de usuarios. Puedes gestionar información relacionada con usuarios específicos utilizando las funciones add_user_meta
, update_user_meta
, get_user_meta
y delete_user_meta
.
Si necesitas acceder a esta información guardada desde JavaScript, puedes crear un pequeño script PHP que muestre lo que necesites y llamarlo mediante Ajax.

Explicaré cómo configurar una sesión de nombre de usuario con el plugin Native PHP Sessions for WordPress. Puedes aplicar esta lógica a tu problema.
Añade esto a tu archivo functions.php
if (!session_id()) {
session_start();
}
if ( isset( $_POST['wp-submit'] ) ){
$_SESSION['username']=$_POST['log'];
}
$_POST['log'] hace referencia al campo de entrada del nombre de usuario en el formulario de inicio de sesión de WordPress. Cuando un usuario inicia sesión, el nombre de usuario se almacena en $_SESSION['username']. En tu caso, cambiarías 'log' por los nombres de variables de formulario que tengas, como 'car_color'.
Puedes hacer referencia al nombre de usuario más adelante en otro archivo php mediante:
$username=$_SESSION['username'];

Primero debes iniciar una sesión en WordPress pero no puedes iniciar una sesión en WordPress así como así.
Antes de iniciar sesiones, necesitas verificar si algún plugin inició la sesión previamente porque podrías tener problemas inesperados. Por lo tanto, necesitas un pequeño algoritmo para eso.
if (version_compare(PHP_VERSION, '7.0.0', '>=')) {
if(function_exists('session_status') && session_status() == PHP_SESSION_NONE) {
session_start(apply_filters( 'cf_geoplugin_php7_session_options', array(
'cache_limiter' => 'private_no_expire',
'read_and_close' => false
)));
}
}
else if (version_compare(PHP_VERSION, '5.4.0', '>=') && version_compare(PHP_VERSION, '7.0.0', '<'))
{
if (function_exists('session_status') && session_status() == PHP_SESSION_NONE) {
session_cache_limiter('private_no_expire');
session_start();
}
}
else
{
if(session_id() == '') {
if(version_compare(PHP_VERSION, '4.0.0', '>=')){
session_cache_limiter('private_no_expire');
}
session_start();
}
}
También he agregado soporte para versiones más antiguas de PHP aquí.

En la página PHP que recibe la solicitud AJAX, configura $_SESSION de esta manera.
$car_color = <datos seleccionados por el usuario en el formulario>;
$_SESSION['car_color'] = $car_color;
Accede a la variable $_SESSION
if(isset($_SESSION['car_color'])) {
$value = $_SESSION['car_color'];
} else {
$value = 'Por favor selecciona un color de coche.';
}
Este tutorial entra en más detalle sobre la configuración y eliminación adecuada de sesiones.
