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

Casilla de términos y condiciones

El 25 de mayo de este año entrará 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/

6 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?

Deja un comentario


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