RGPD para Woocommerce

Ya que nosotros hacemos un gran esfuerzo en cumplir con toda la normativa de Protección de datos, y es difícil encontrar un plugin que nos permita cumplir con toda la normativa, hemos hecho una recopilación de snippets que nos permitirá tener nuestro sitio al día y actualizado con todo lo referente en protección de datos a una tienda de Woocommerce.

Exploraremos parte por parte de nuestro sitio, para cumplir con todos los requisitos, comencemos:

Comentarios

En los comentarios, tenemos que añadir la política de privacidad


/* 
Política de privacidad en comentarios
*/
function trecenode_sobrescribiendo_jetpack() {
  return;
}
add_filter( 'jetpack_comment_subscription_form', 'trecenode_sobrescribiendo_jetpack' );

function trecenode_campos_comentarios( $formulario ) {
	global $post;
	$formulario['comment_notes_after'] = '';

	if ( class_exists( 'Jetpack_Subscriptions' ) ) {
		$campos = '';

		if ( false === has_filter( 'comment_form', 'show_subscription_checkbox' ) && 1 == get_option( 'stc_enabled', 1 ) && empty( $post->post_password ) ) {
			// Subscribe to comments checkbox
			$campos .= '
            <p class="comment-subscription-form"> ';
			$campos .= '';
			$campos .= '

'; } if ( 1 == get_option( 'stb_enabled', 1 ) ) { // Subscribe to blog checkbox $campos .= ' <p class="comment-subscription-form"> '; $campos .= ''; $campos .= '

'; } $campos .= ' <p class="comment-subscription-form"> '; $campos .= ''; $campos .= '

'; $formulario['submit_field'] = $campos . $formulario['submit_field'] ; } return $formulario; } add_filter( 'comment_form_defaults', 'trecenode_campos_comentarios' ); /* RGPD en comentarios */ $rgpd = ' <h4 class="comment-reply-title comentarios">Información básica sobre Protección de Datos <p class="comment-subscription-form"> <ul>
  • Responsable: 13Node S.L,
  • Fin del tratamiento: Mantener una relación comercial y el envío de comunicaciones sobre nuestros productos y servicios.
  • Legitimación: El consentimiento del usuario.
  • Comunicación de los datos: No se comunicarán los datos a terceros, salvo por una obligación legal.
  • Derechos: Acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la información adicional.
  • Contacto: [email protected].
  • Información adicional: Puede consultar la información adicional y detallada sobre Protección de Datos en Política de Privacidad.
  • </ul> </p> '; //Identificado function trecenode_rgpd_comentarios_login( $formulario ) { global $rgpd; return $formulario . $rgpd; } //Sin identificar function trecenode_rgpd_comentarios() { global $rgpd; echo $rgpd; } if ( is_user_logged_in() ) { add_action( 'comment_form_field_comment', 'trecenode_rgpd_comentarios_login' ); } else { add_action( 'comment_form_after_fields', 'trecenode_rgpd_comentarios' ); }

    Si no usas Jetpack by Wordpress.com, el código se simplifica bastante

    
    /*
    Política de privacidad en comentarios
    */
    function trecenode_campos_comentarios( $formulario ) {
    	$formulario['comment_notes_after'] = '';
    
    	$campos = '
    	<p class="comment-subscription-form"> ';
    	$campos .= '';
    	$campos .= '</p>
    	';
    
    	$formulario['submit_field'] = $campos . $formulario['submit_field'] ;
    
    	return $formulario;
    }
    add_filter( 'comment_form_defaults', 'trecenode_campos_comentarios' );
    
    // Solo añadir si tu theme da problemas
    function trecenode_validacion_de_comentarios() {
        if ( is_single() && comments_open() ) {
    ?>        
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js">
    <script type="text/javascript">
    jQuery(document).ready(function( $ ) {
    	$( '#commentform' ).validate( {
    		errorElement: "div",
    		errorPlacement: function( error, element ) {
    			element.parent().append( error );
    		}
    	} );
    } );
    jQuery.extend( jQuery.validator.messages, {
    	required: "Este campo es requerido.",
    } );
    
    <?php
        }
    }
    add_action( 'wp_footer', 'trecenode_validacion_de_comentarios' );
    
    

    De esta forma ya tendríamos el obligado botón de aceptación de política de privacidad y el obligado texto informativo previo.

    Recuerda que estas funciones son validas tanto para el formulario de comentarios de WordPress (entradas de blog) como para el formulario de comentarios de WooCommerce (valoración de productos).

    Registro

    En el formulario de registro de WooCommerce también hay que poner tanto el texto informativo como la casilla de aceptación de la política de privacidad.

    De nuevo hemos tenido que crear un pequeño código PHP en el fichero functions.php nuestro tema hijo que se encarga de utilizar el mismo texto utilizado en la función anterior, de añadir la casilla de verificación y de validarla antes de aceptar el registro de un nuevo usuario.

    El código PHP que hemos utilizado es el siguiente:

    
    /*
    Política de privacidad en registro
    */
    function trecenode_rgpd_registro_woocommerce() {
    	global $rgpd;
    
    	echo $rgpd . '
        <p class="woocommerce-form-row woocommerce-form-row--wide form-row form-row-wide">

    '; } add_action( 'woocommerce_register_form', 'trecenode_rgpd_registro_woocommerce' ); //Validación function trecenode_valida_registro( $validation_errors, $username, $email ) { if ( !isset( $_POST['privacy'] ) || $_POST['privacy'] != "privacy-key" ) { $validation_errors = new WP_Error( 'failed_verification', __('Debes aceptar la Política de Privacidad.', 'woocommerce') ); } return $validation_errors; } add_filter( 'woocommerce_registration_errors', 'trecenode_valida_registro', 10, 3 );

    Checkout

    En el formulario de compra también es necesario añadir ambos requerimientos, el texto informativo y la casilla de aceptación de la política de privacidad. Recuerda que en el checkout (formulario de compra) además de los formularios de facturación y envío se puede añadir un formulario de registro, e incluso una casilla para apuntarse a la lista de correo. En nuestro caso particular al añadir los requerimientos legales en el checkout de WooCommerce nos ha servido a un triple propósito: la aceptación de la política de privacidad al solicitar los datos de facturación, al solicitar un usuario y/o contraseña (en caso de que quiera registrarse como usuario), y al aceptar apuntarse a la lista de correo electrónico. Para conseguir todo esto hemos añadido el suguiente código PHP en el fichero functions.php nuestro tema hijo
    
    /*
    Política de privacidad en checkout
    */
    function trecenode_rgpd_checkout() {
    	global $rgpd;
    
    	echo $rgpd . '
        <p class="form-row terms">

    '; } add_action( 'woocommerce_checkout_before_terms_and_conditions', 'trecenode_rgpd_checkout' ); //Validación function trecenode_valida_checkout() { if ( !isset( $_POST['privacy'] ) || $_POST['privacy'] != "privacy-key" ) { wc_add_notice( __( 'Debes aceptar la Política de Privacidad.', 'woocommerce' ), 'error' ); } } add_action( 'woocommerce_checkout_process', 'trecenode_valida_checkout' );

    Este simple código se encarga de añadir el texto informativo y la casilla de aceptación de la política de privacidad previo a la casilla de aceptación de las condiciones generales de contratación, además de validar su aceptación antes de aceptar la finalización del pedido.

    Obviamente presuponemos que ya tienes configurada en WooCommerce la aceptación de las Condiciones Generales de Contratación.

    Lista de correo

    En nuestro blog, y en todas nuestras entradas, además de en el propio checkout y en los formularios de comentarios, es posible apuntarse a nuestra lista de correo, en todos los casos hemos tenido que añadir el texto informativo y la casilla de aceptación de la política de privacidad.

    En el único caso que ya no estaba cubierto por alguno de los códigos aquí publicados ha sido el formulario que añade el widget del plugin de listas de correo que usamos, MailPoet, en el blog y en todas nuestras entradas, de hecho lo debes estar viendo a la derecha de la pantalla, o debajo del contenido de esta entrada si lo estás viendo desde un dispositivo móvil.

    En nuestro caso concreto lo hemos solventado añadiendo el texto informativo en un elemento nativo del theme, Avada, llamado Modal Popup y de otro elemento nativo llamado Modal Link. Lo hemos hecho así para evitar el larguísimo texto en el reducido ancho del widget, que no supera el 32% de la pantalla en dispositivos de más de 800px de ancho de pantalla. En cuanto la casilla de aceptación de la política de privacidad hemos añadido el siguiente código HTML nativo de MailPoet:

    
    <input class="mailpoet_checkbox" name="data[cf_1]" type="checkbox" value="1" data-parsley-required="true" data-parsley-required-message="Debes aceptar la Política de Privacidad" data-parsley-group="custom_field_1" data-parsley-errors-container=".mailpoet_error_1" data-parsley-multiple="datacf_1" /> He leído y acepto la Política de Privacidad y consiento en el tratamiento de mis datos personales. *
    
    En el anterior código ya se añade la validación de la casilla y el texto que se mostrará en caso de que no se haya marcado, y por lo tanto aceptado la política de privacidad.

    Mi cuenta

    Dado que una de las nuevas obligaciones legales que tenemos es que hay que permitir a tus usuarios a borrar sus cuentas de usuario de tu sitio web, hoy mismo hemos creado este último código para hacerlo posible. Concretamente hemos añadido un nuevo botón en la opción Mi cuenta -> Detalles de la cuenta tras el botón nativo Guardar los cambios que permite borrar totalmente la cuenta de usuario. Para lograrlo de nuevo hemos añadido este pequeño código PHP en el fichero functions.php nuestro tema hijo:
    
    /*
    Borra mi cuenta
    */
    function trecenode_boton_borra_cuenta() { 
    	if ( ! current_user_can( 'manage_options' ) ) {
    		$borra_cuenta = add_query_arg( 'wc-api', 'wc-delete-account', home_url( '/' ) ); 
    		$borra_cuenta = wp_nonce_url( $borra_cuenta, 'wc_delete_user' ); 
    ?> 
    <a href="" class="button borrar-cuenta">Borrar cuenta 
    <script>
    	jQuery( document ).ready(function($) {
    		$( "a.borrar-cuenta" ).on( "click", function( e ) {
    			if ( !cconfirm( "¿Estás seguro que quieres borrar tu cuenta? Recuerda que esta acción es irreversible." ) ) {
    				e.preventDefault();
    			}
    		} )
    	} );
        </script>
        <?php 
    	}
    } 
    add_action( 'woocommerce_edit_account_form_end', 'trecenode_boton_borra_cuenta', 10 );
    
    function trecenode_borra_cuenta() {
    	if ( !current_user_can( 'manage_options' ) ) { 
    		if ( check_admin_referer( 'wc_delete_user' ) ) { 
    			require( './wp-admin/includes/user.php' ); 
    			wp_delete_user( get_current_user_id() ); 
    			wp_redirect( home_url() ); 
    			die(); 
    		} 
    	} else {
    		wp_redirect( wc_get_page_permalink( 'myaccount' ) ); 
    	}
    }
    add_action( 'woocommerce_api_' . strtolower( 'wc-delete-account' ), 'trecenode_borra_cuenta' );
    
    
    Con él conseguimos mostrar el botón a todos los usuarios que no tengan un perfil Administrador, no queremos que borréis vuestras propias cuentas por error, y tras confirmar su borrado con una simple confirmación JavaScript se procede al borrado definitivo de la cuenta de WooCommerce. Esperamos que vuestros clientes estén contentos con vuestros productos y/o servicios y no se os borren masivamente de vuestra tienda online.

    Aviso del tratamiento de datos bajo RGPD

    Si eres usuario de trecenode habrás recibido un correo electrónico con este aviso y si eres visitante del sitio web lo habrás visto en forma de ventana emergente. Para hacerlo posible, en nuestro caso concreto, hemos utilizado nuestro gestor de listas de correo electrónico, MailPoet, y el elemento nativo de Avada Modal Popup, al que le hemos añadido un pequeño código JavaScript personalizado para lograr su apertura automática diaria. En vuestro caso tendréis que hacer uso de vuestras propias herramientas para lograrlo: MailChimp, MailPoet o MailRelay, entre otras, y un plugin de popups automáticos, si es que tu tema no permite hacerlos.

    Correos electrónicos y facturas

    Tanto en los primeros como en las segundas hay que añadir unos textos legales para cumplir con la normativa vigente. Para conseguirlo en el primer caso tendrás que incluirlos en el campo Texto de pie de página que tienes disponible en WooCommerce -> Ajustes -> Correos electrónicos. En el segundo caso debes incluirlo en el plugin de facturación que uses en WooCommerce. En nuestro caso concreto hemos personalizado la plantilla del plugin WooCommerce PDF Invoices & Packing Slips para incluir el texto que necesitábamos en el footer de los facturas PDF que se generan.

    Conclusión

    Esperamos que esta guía definitiva sea eso, una guía definitiva y que no necesitéis nada más que esta guía para cumplir al 100% con el RGPD en vuestros sitios web. Recuerda que si necesitas ayuda siempre puedes solicitarnos presupuesto. Quedamos a la espera de vuestros comentarios y aportaciones, esperando que este tutorial os haya sido de gran ayuda.

    En 13Node buscamos freelance con talento que quieran colaborar en nuestros trabajos y proyectos. Si eres diseñador, animador, programador web..., ponte en contacto con nosotros enviando tu portafolio a [email protected]