Precarga!

Rut Chileno: para Woocommerce y con validación

Esta publicación fue actualizada el 12 de junio de 2023.

Hace mucho tiempo que no me daba el tiempo para hacer algo por acá. En esta oportunidad quiero compartir el código para agregar el campo RUT en el checkout de WooCommerce. Me pidieron agregar el campo porque, varias empresas de transporte lo están solicitando a la hora de hacer un envío.

Después de probar varios códigos, logré mezclar lo mejor de cada uno y quedó el siguiente código que se puede incorporar con Woody Snippet:

// Agrego el campo Rut chileno en el proceso de finalizar compra de Woocommerce

add_filter('woocommerce_checkout_fields', 'agregar_campo_rut_checkout');

function agregar_campo_rut_checkout($fields) {
    $fields['billing']['billing_rut'] = array(
        'label'       => __('RUT', 'woocommerce'),
        'placeholder' => _x('RUT', 'placeholder', 'woocommerce'),
        'required'    => true,
        'class'       => array('form-row-wide'),
        'clear'       => true
    );

    return $fields;
}

// Acá valido formato de Rut chileno en el proceso de finalizar compra de Woocommerce
// 05.06.2023 Se agregó la función sanitize_text_field() para limpiar el valor del campo RUT y evitar posibles ataques

add_action('woocommerce_checkout_process', 'validar_rut_checkout');

function validar_rut_checkout() {
    $rut = sanitize_text_field($_POST['billing_rut']);

    if (!empty($rut) && !validar_rut_chileno($rut)) {
        wc_add_notice(__('Por favor, ingresa un RUT válido.'), 'error');
    }
}

// Acá la función para validar el formato de Rut chileno

function validar_rut_chileno($rut) {
    $rut = preg_replace('/[^0-9kK]/', '', $rut);

    if (strlen($rut) < 3) {
        return false;
    }

    $rut_body = substr($rut, 0, -1);
    $rut_dv = strtoupper(substr($rut, -1));

    $factor = 2;
    $suma = 0;

    for ($i = strlen($rut_body) - 1; $i >= 0; $i--) {
        $suma += $factor * $rut_body[$i];
        $factor = $factor % 7 == 0 ? 2 : $factor + 1;
    }

    $dv = 11 - ($suma % 11);

    if ($dv == 10) {
        $dv = 'K';
    } elseif ($dv == 11) {
        $dv = '0';
    }

    return $dv == $rut_dv;
}

Acá puedes descargar Woody Snippets

Espero que sea de ayuda para quienes buscan este requerimiento.
Hasta la próxima!

Loading

2 comentarios en «Rut Chileno: para Woocommerce y con validación»

Deja un comentario