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.