Soporte » Plugins y Hacks » WooCommerce » Guardar valor de checkbox

  • Resuelto nuevaenword

    (@nuevaenword)


    Buenas tardes. He colocado un checkbox en el archivo «functions.php» de mi child theme para que el cliente marque la casilla en caso de que quiera recibir la factura por correo electrónico. Quiero que me guarde el valor de esa casilla en la orden de compra. Es decir que si ha marcado la casilla tiene que mostrarme el mensaje «Deseo recibir la factura por correo electrónico». Esto último no lo consigo. A continuación pego el fragmento de código que estoy utilizando. Gracias de antemano.

    Un saludo 🙂

    »

    /**
    * Añadir un checkbox al final de la página de finalizar compra
    **/
    add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');
    
    function my_custom_checkout_field( $checkout ) {
    
    woocommerce_form_field( 'my_checkbox', array(
    'type' => 'checkbox',
    'class' => array('input-checkbox'),
    'label' => __('Deseo recibir mi factura por correo electrónico'), // Pon el mensaje despues de la caja o checkbox
    'required' => false, // Pon true si quieres que sea obligatorio y false para opcional
    ), $checkout->get_value( 'my_checkbox' ));
    }
    
    /**
    * Acciones extras
    **/
    add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
    
    function my_custom_checkout_field_process() {
    global $woocommerce;
    
    // Menaje de error si pusiste true. Lo he comentado porque el campo no es requerido y me daba error.
    /**if (!$_POST['my_checkbox'])
    $woocommerce->add_error( __('Por favor completa el campo de...') ); // Cambia aquí el mensaje**/
    }
    
    /**
    * Campo personalizado para el checkout
    **/
    add_action('woocommerce_checkout_update_order_meta', 'my_custom_checkout_field_update_order_meta');
    
    function my_custom_checkout_field_update_order_meta( $order_id ) {
    if ($_POST['my_checkbox']) update_post_meta( $order_id, 'Deseo recibir mi factura por correo electrónico', esc_attr($_POST['my_checkbox'])); // Cambia aquí el nombre del campo
    }

    «

Viendo 7 respuestas - de la 1 a la 7 (de un total de 7)
  • Muy buenas @nuevaenword

    Prueba con este código:

    // Añadir un campo checkbox al checkout y al anadir_estado_pedido_enviado_a_estados
    add_action( 'woocommerce_review_order_before_submit', 'anadir_campo_checkbox_checkout' );
    function anadir_campo_checkbox_checkout() {
        echo '<div id="campo-factura-pdf">';
    
        woocommerce_form_field( 'cliente_quiere_factura', array(
            'type'      => 'checkbox',
            'class'     => array('input-checkbox'),
            'label'     => __('¿Deseas recibir la factura por correo electrónico?'),
        ),  WC()->checkout->get_value( 'cliente_quiere_factura' ) );
        echo '</div>';
    }
    
    // Guardar el campo del checkout en los meta del pedido, cuando se ha checkeado el checkbox
    add_action( 'woocommerce_checkout_update_order_meta', 'actualizar_meta_campo_checkout_factura', 10, 1 );
    function actualizar_meta_campo_checkout_factura( $order_id ) {
    
        if ( ! empty( $_POST['cliente_quiere_factura'] ) )
            update_post_meta( $order_id, 'cliente_quiere_factura', $_POST['cliente_quiere_factura'] );
    }
    
    // Mostrar el resultado del campo checkout en el admin del pedido
    add_action( 'woocommerce_admin_order_data_after_billing_address', 'mostrar_campo_checkout_detalles_pedido_admin', 10, 1 );
    function mostrar_campo_checkout_detalles_pedido_admin( $order ){
        $cliente_quiere_factura = get_post_meta( $order->get_id(), 'cliente_quiere_factura', true );
        if( $cliente_quiere_factura == 1 ) {
            echo '<p><strong>¿Quiere factura por email?: </strong> <span style="color:red;">SI</span></p>';
    		} else {
    				echo '<p><strong>¿Quiere factura por email?: </strong> <span style="color:black;">NO</span></p>';
    		}
    }

    Yo lo he testeado con WooCommerce 5 y funciona.

    Ya me cuentas a ver qué tal.

    Saludos.

    Iniciador del debate nuevaenword

    (@nuevaenword)

    ¡Impresionante! Muchísimas gracias. Ahora necesitaría que las facturas creadas con «WooCommerce PDF Invoices and Packing Slips», se enviaran únicamente a los clientes que hubieran marcado esa casilla. ¿Alguna idea? Gracias de antemano.

    Un saludo 🙂

    Ya sabía yo que esto no quedaría aquí. Jajaja…

    Bueno, si te parece cerramos este hilo y lo que puedes hacer antes de nada, es lanzar esta consulta en el foro de soporte del plugin que comentas.

    No es por nada pero es algo que igual allí te lo resuelven antes que yo porque seguro que controlan bien el plugin en cuestión.

    De todas formas, si quieres comentar por aquí el resultado, perfecto.

    Venga, mucho ánimo!

    Iniciador del debate nuevaenword

    (@nuevaenword)

    Se me ha visto el plumero. Me has calado ja, ja, ja. Me has ayudado muchísimo. Voy a hacer lo que me dices. Que pases un buen finde.

    Un saludo 🙂

    Jajaja…

    Cuando puedas, da por cerrada la consulta, porfa..

    Saludos y mucho ánimo!!

    Iniciador del debate nuevaenword

    (@nuevaenword)

    Hola Oscar. Disculpa. Tengo un problemilla. Cuando el cliente no marca la casilla no se me genera la factura y necesito que se genere siempre por motivos administrativos. ¿Alguna idea? Gracias de antemano.

    Un saludo 🙂

    Muy buenas @nuevaenword

    Ya te comenté que dejaras tu consulta en el plugin en cuestión porque ellos te van a poder ayudar mucho mejor.

    De todas formas, es algo que no es tan sencillo sin conocer bien el plugin porque no sé como tiene en cuenta a la hora de generar las facturas pdf.

    Como te digo, lanza tu consulta en el foro de ese plugin.

    Saludos.

Viendo 7 respuestas - de la 1 a la 7 (de un total de 7)
  • Debes estar registrado para responder a este debate.