Guardar términos y condiciones de WooCommerce en la base de datos

Casilla de términos y condiciones

El 25 de mayo de 2018 entró en vigor el Reglamento General de Protección de Datos (RGPD), la nueva ley que pretende otorgar mayor seguridad y control a las personas sobre su información personal, así como establecer unas reglas comunes en toda Europa de protección de dicha información. Entre muchas otras cosas, quien gestione datos privados debe poder demostrar que el cliente/usuario dió su permiso para gestionar sus datos personales.

¿Qué hace WooCommerce por defecto?

WooCommerce te lo pone fácil para que el usuario no pueda comprar nada si no acepta los términos y condiciones. Solo hay que crear una página con los términos y condiciones de la tienda y asignarla en Ajustes > Finalizar compra > Páginas de finalizar compra.

Lugar de asignación de términos y condiciones

Y así, justo antes de pagar, veremos esto:

Casilla de términos y condiciones

Genial, pero eso solo fuerza al usuario a marcar la casilla. Legalmente no podrás demostrar que el usuario marcó tal casilla porque WooCommerce no almacena en ningún lugar tal aceptación por defecto.

¿Cómo guardar los términos y condiciones en la base de datos entonces?

Lo que vamos a hacer es añadir un pequeño código para que sí podamos guardar esa aceptación, y para eso abrimos nuestro archivo functions.php de WordPress, que está en la ruta wp-content/themes/el_tema_en_cuestion/functions.php. Aquí hago dos pequeños paréntesis en forma de consejos:

  1. Para acceder al archivo, tendremos que conectarnos vía FTP. Teóricamente también se puede acceder mediante el editor de ficheros que tiene WordPress en el menú Apariencia, pero no es recomendable ya que te lo pone “demasiado fácil” y es muy sencillo tocar algo que no se debe, además de por temas de seguridad.
  2. Es recomendable crear un tema hijo y modificar el functions.php del tema hijo en vez del tema padre, ya que cada vez que el tema padre se actualize se perderán los cambios. Para saber cómo crear un tema hijo os recomiendo visitar el siguiente post: https://ayudawp.com/como-crear-un-tema-hijo-en-wordpress/

Una vez dentro del archivo, el código a añadir es (ojo, siempre después de la etiqueta <?php):


// Almacenar términos y condiciones en la base de datos
add_action('woocommerce_checkout_update_order_meta', 'woo_save_terms_and_conditions_status');
function woo_save_terms_and_conditions_status( $order_id ) {
    if ($_POST['terms']) update_post_meta( $order_id, '_terms', esc_attr($_POST['terms']));
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'woo_display_terms_and_conditions_status', 10, 1 );
function woo_display_terms_and_conditions_status($order){
	$terms = get_post_meta( $order->id, '_terms', true );
	$terms_status = ( $terms == 'on' ? __('aceptado') : __('undefined') );
    echo '<p><strong>'.__('Términos y condiciones').':</strong> ' . $terms_status . '</p>';
}

Y ya está. Ahora, cada vez que nos compren algo, en el pedido en nuestro panel de administración podremos ver lo siguiente porque tenemos la aceptación almacenada en nuestra base de datos:

Prueba de aceptación de términos y condiciones

—-

Fuente: http://www.remicorson.com/storing-woocommerce-terms-conditions-in-the-database/

10 comentarios

  1. Lior el 03/04/2018 a las 23:15

    ¡Importante! Gracias

    • Gerard el 04/04/2018 a las 08:14

      De nada Lior 🙂

  2. Daniel el 18/07/2018 a las 08:33

    Si ya hay usuarios registrados, y usan contenido gratuíto, como puedo hacer para que acepten los términos, sin que hagan una compra? Por el simple hecho de estar en el sitio web o ver contenido gratis? Y a su vez guardar esa prueba? O más bien eso sería un aviso legal?

    • Gerard el 18/07/2018 a las 13:19

      Hola Daniel, ¿de qué tipo de contenido estamos hablando?

  3. Cristina el 25/07/2018 a las 13:13

    Hola, lo he utilizado, pero me pone “undefined”, creo que es pq uso el Yith terms and conditions popup plugin. Sabrias decirme como podria mostrar el valor de lo que se ha aceptado a través de ese plugin?

    • Gerard el 25/07/2018 a las 14:58

      Me temo que no sé decirte la respuesta, pero ¿qué es lo que hace exactamente ese plugin? O sea, ¿si lo desactivas ya funciona el código que he puesto?

  4. Jose Manuel Gomez Ruiz el 25/02/2019 a las 11:26

    Buenas Gerard, tu código funciona a la perfección, aun así no me aclaro con el tema RGPD, te cuento, ademas de este checkbox tengo otro para la política de privacidad en finalizar comprar, registro de usuarios y en comentarios(valoraciones), deben estos checkbox dejar constancia que han sido aceptados, o solo términos y condiciones en finalizar comprar?

    Espero haberme explicado bien, gran trabajo muchas gracias.

    Un Saludo.

    • Gerard el 25/02/2019 a las 15:35

      Hola Jose Manuel,

      Me alegro que te funcione, primero de todo.

      Respecto a tu pregunta, sí, técnicamente debes poder demostrar que el usuario marcó la checkbox, o sea, el marcado tiene que estar en alguna “base de datos”, ya sea la misma de WordPress, o tu correo, o algún sitio.

      Una cosa que te puedes ahorrar es la segunda checkbox en la página de finalizar compra (la de política de privacidad). Lo que se recomienda es agregar la primera capa de información con un enlace a la política de privacidad, y luego el checkbox a la página de términos y condiciones. Y en esa página de términos y condiciones también metes el enlace a la página de privacidad. Así, el usuario tendría que leer (aunque nadie lo haga) todos los términos y condiciones y allí le saldría la política de privacidad. Algo así: https://i.imgur.com/y5lQ55d.png

      ¡Un saludo!

      • Jose Manuel Gomez Ruiz el 25/02/2019 a las 17:07

        Gracias por la aclaración y el consejo, ahora se que me tengo que centrar en conseguir que esa aceptación de Política de privacidad quede registrada, espero no volverme loco, muchas gracias.
        Un saludo!

        • Gerard el 25/02/2019 a las 18:17

          No hay de qué. Como idea (también para mi para una futura entrada en este blog), se podría reemplazar el formulario de comentarios/registro de usuario por otro que registre esa checkbox, usando algun plugin. Hay que investigar 😉

Deja un comentario


He leído y acepto la política de privacidad