¿Cómo almacenar y recibir variables en sesiones de WP?

9 oct 2013, 16:53:25
Vistas: 158K
Votos: 37

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).

2
Comentarios

Si la respuesta te fue útil, considera aceptarla. Consulta »¿Qué debo hacer cuando alguien responde mi pregunta?« y/o »¿Por qué es importante votar?«, más información sobre el modelo de [wordpress.se] está disponible en la [ayuda].

Nicolai Grossherr Nicolai Grossherr
29 abr 2015 15:34:06

Creo que el siguiente enlace te ayudará. https://wordpress.stackexchange.com/questions/105453/getting-headers-already-sent-error-from-plugin

Vivekanand Saraswati Vivekanand Saraswati
4 oct 2018 16:36:32
Todas las respuestas a la pregunta 6
0
47

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.

9 oct 2013 17:54:40
0

agrega esto en tu archivo functions.php

<?php

function tatwerat_startSession() {
    if(!session_id()) {
        session_start();
    }
}

add_action('init', 'tatwerat_startSession', 1);
14 jun 2017 12:39:46
1

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.

12 ago 2016 23:57:26
Comentarios

Esto solo es bueno si el usuario ha iniciado sesión.

Tim Hallman Tim Hallman
10 nov 2016 20:31:06
0

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'];
5 ago 2018 23:43:56
0

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í.

31 ago 2020 17:35:17
0

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.

5 dic 2016 22:00:28