Guardar datos en la sesión de WooCommerce

4 minutos de lectura

avatar de usuario
Juan McCarthy

Estoy intentando guardar una entrada de texto simple en la sesión de WooCommerce. La sesión se crea cuando un usuario agrega algo a su carrito.

Mi campo de entrada existe en una plantilla de página personalizada que se colocará en el flujo de usuario después del carrito pero antes del pago: carrito > mi plantilla > pago.

Hasta aquí

Formulario simple para capturar datos (archivo de plantilla personalizado)

<form name="group" method="post" class="checkout woocommerce-checkout" action="http://localhost:/site.dev/my-template">
    <div class="group-order">
        <p class="form-row form-row woocommerce-validated" id="create_new_group_field">
            <label for="create_new_group" class="">Join an existing group</label>
            <input type="text" class="input-text " name="create_new_group" id="create_new_group">
        </p>
    </div>
</form>

Recepción y configuración de datos (tengo problemas para saber cuándo/cómo ejecutar esto. en mi página personalizada)

ACTUALIZAR
Agregué el siguiente código en la parte superior de la plantilla de mi página para que la página se procese sola y luego se redirija a la caja.

función set_and_save_input_to_session() {

if( !is_admin( ) ) {
    // User input
    if( ! empty( $_POST['create_new_group'] ) ) {
        $group_input_value =  $_POST['create_new_group']; 

        // Set session and save data
        WC()->session->set( 'group_order_data', $group_input_value );

        wp_redirect( 'http://localhost:28/site.dev/checkout' );
        exit();
    }
}
get_header();

add_action(‘woocommerce_checkout_process’, ‘set_and_save_input_to_session’);

Recuperar y guardar datos

function retrieve_and_save_group_input_value_to_order_meta() {
    $retrived_group_input_value = WC()->session->get( 'group_order_data' );

    update_post_meta( $order_id, '_create_new_group', $retrived_group_input_value );
}
add_action('woocommerce_checkout_update_order_meta', 'retrieve_and_save_group_input_value_to_order_meta');

Actualmente estoy trabajando en lo que para mí son soluciones más complejas y, por lo tanto, agradecería que alguien pudiera señalar cualquier falla importante en mi proceso hasta ahora.

ACTUALIZAR

Puedo confirmar que el formulario está recibiendo datos y que el WC()->session->set está configurando datos. (Gracias a @Firefog por sugerir el uso del $_SESSION global)

Después de una mayor investigación y de encontrar el lugar adecuado para var_dump los datos de la sesión Descubrí que los datos se estaban configurando en la sesión con mi método original.

Los datos están configurados, pero no puedo ver por qué los datos no se guardarán en el pedido.

  • ¿Por qué querrías ejecutarlo en tu página personalizada? Veo que tienes el formulario en esa página…

    –Reigel Gallarde

    13 de diciembre de 2015 a las 2:27

  • Gracias, debido a esta pregunta en sí logré resolver mi problema.

    – Nick

    19 de junio de 2017 a las 12:35

es más decir gracias por solucionar mi problema. Pero aquí también hay una respuesta:

La publicación meta no se pudo actualizar porque no hay $order_id parámetro en su función de devolución de llamada. Esto debería funcionar:

function retrieve_and_save_group_input_value_to_order_meta( $order_id ) {
    $retrived_group_input_value = WC()->session->get( 'group_order_data' );

    update_post_meta( $order_id, '_create_new_group', $retrived_group_input_value );
}
add_action('woocommerce_checkout_update_order_meta', 'retrieve_and_save_group_input_value_to_order_meta');

avatar de usuario
niebla de fuego

Aquí hay otro enfoque.

1ra página:

 session_start();//place this at the top of all code
 $data = $_POST['create_new_group'];
 $_SESSION['custom_create_new_group']=$data;

Ahora en otra página escribe lo siguiente para recibir el valor:

session_start(); //optional     
$retrive_price =  $_SESSION['custom_create_new_group'];

  • Gracias @Firefog, puedo ver que está funcionando en tu ejemplo. Y entiendo que debería funcionar para mí. Pero hasta ahora todavía no recibo datos guardados. Estoy usando los ejemplos de código que proporcionó: los datos de recuperación se llaman con el 'woocommerce_checkout_update_order_meta' gancho.

    – John McCarthy

    13 dic 2015 a las 20:38


  • ¿colocas el session_start () en ambas páginas? recuerda publicarlo en la primera línea de tu código

    – Niebla de fuego

    13 dic 2015 a las 20:55

  • Gracias, tuve que llamar al session_start() al primer gancho llamado en la función shortcode woocommerce_check_cart_items. tengo un var_dump del $_SESSION variable que me dice que mis datos están configurados para la sesión, lo cual es genial. Actualmente, el meta del pedido no se actualiza con los datos. Informaré de nuevo.

    – John McCarthy

    13 dic 2015 a las 22:32


  • Revisé cómo estoy guardando los datos en el pedido, he usado el mismo gancho y proceso en el pasado para los campos de pago personalizados. Parece como si el valor no se está pasando a la update_post_meta función.

    – John McCarthy

    13 de diciembre de 2015 a las 22:53


¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad