Almacenar el checked de «Acepto las condiciones de compra» de WooCommerce en la DDBB

Funciones útiles para WooCommerce VI

En esta entrada vamos a añadir una funcionalidad que nos puede ser muy útil por temas legales.
Por defecto, en WooCommerce hay que marcar un check como que hemos leído las condiciones legales de la tienda, pero ese check no se almacena en ningún sitio. Simplemente hay que marcarlo (is required) para que nos deje continuar con nuestra compra.
Hasta aquí todo bien, pero ¿cómo podemos demostrar ante un juez que ese check ya estaba cuando el usuario compró en nuestra tienda hace un mes?
Con este código añadimos en base de datos un post_meta al pedido con la clave '_term' y el valor 'aceptado' vinculado al pedido.

Lo primero, como siempre, es definir la función en el archivo functions.php del tema que estamos creando o en del Child-Theme si hemos optado por modificar un tema comprado:

function woo_save_terms_and_conditions_status( $order_id ) {
    if ($_POST['terms']) update_post_meta( $order_id, '_terms', esc_attr($_POST['terms']));
}

Después la «enganchamos» al hook 'woocommerce_checkout_update_order_meta' con un 'add_action' así:

add_action('woocommerce_checkout_update_order_meta', 'woo_save_terms_and_conditions_status');

Esto nos guardará en DDBB el valor 'aceptado' en nuestro pedido.
Para mostrarlo en el backend de WooCommerce al revisar los pedidos, añadiremos la siguiente función:

function woo_display_terms_and_conditions_status($order){
    $terms = get_post_meta( $order->id, '_terms', true );
    $terms_status = ( $terms == 'on' ? __('aceptado', 'nombre_de_tu_tema') : __('indefinido', 'nombre_de_tu_tema') );
    echo '<p><strong>'.__('Términos y condiciones', 'nombre_de_tu_tema').':</strong> ' . $terms_status . '</p>';
}

Y la anclamos al hook 'woocommerce_admin_order_data_after_billing_address' de la siguiente forma:

add_action( 'woocommerce_admin_order_data_after_billing_address', 'woo_display_terms_and_conditions_status', 10, 1 );

Con esto podemos quitarnos algún dolor de cabeza en nuestra tienda online

Pues eso es todo en esta entrada. Espero que la pongáis en práctica y recordad: Sólo se aprende rompiendo y destripando el código. ¡Practica!.

Compartidlo si lo veis útil.

2 Comentarios

  1. jaime Autor abril 1, 2016 (12:34 pm)

    Hola!
    Sabrías decirme como se puede dejar automarcado el check de aceptación de términos y condiciones en la página de formulario de compra de woocommerce? me lo pide un cliente y, aunque yo no se lo recomienda, insiste…

    Gracias y feliz fin de semana

    Responder a jaime
    • Jose Lazo Autor abril 1, 2016 (9:36 pm)

      Hola Jaime,

      Sólo tienes que añadir estas líneas en tu archivo functions.php (recuerda hacer un ChildTheme si no es un tema desarrollado por ti):

      /**
      * Marcar por defecto la casilla de "Acepto los términos y condiciones" de WC
      *
      * @return bool
      */
      function jjlazo_wc_terms( $terms_is_checked ) {
      return true;
      }
      add_filter( 'woocommerce_terms_is_checked_default', 'jjlazo_wc_terms', 10 );

      Un saludo y espero que le sirva a tu cliente 😉

      Responder a Jose Lazo

Deje un Comentario

*Campos obligatorios Por favor valide los campos obligatorios

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.