Mi primer plugin para WordPress

Llevo muchos años siendo usuario de WordPress y siempre he visto el tema de los plugins como algo que tenía pendiente de explorar a fondo.

Ahora ha llegado el momento de darle un vistazo al desarrollo de plugins y conocer un poco más como funcionan.

Para ello, he creado un plugin muy sencillo, un validador del NIF/NIE, que nos indica si un NIF/NIE introducido es válido o no.

Para quién tenga curiosidad en como funciona la validación del NIF/NIE, le recomiendo que le de un vistazo a la web del Ministerio del Interior, donde se explica como funciona.

Montando el plugin

En primer lugar, dentro del directorio wp-content/plugins, creamos un directorio para poder almacenar el código del plugin. El fichero principal del plugin, en este caso dni_validator_plugin.php, contendrá de forma obligatoria este contenido:

<?php
/*
Plugin Name: NOMBRE_DEL_PLUGIN
Description: QUE HACE EL PLUGIN
Version: 1.0
Author: NOMBRE DEL AUTOR
*/

Este contenido es el que se verá después en la descripción de la sección de plugins de WordPress.

En este caso, en el fichero principal, hemos creado la función que sirve para validad el NIF/NIE y que podemos encontrar buscando un poco en Google. La función propuesta, valida tanto el NIF español como los NIE.

// CODIGO ANTERIOR
// ..................

function validar_dni_espanol($documento) {

    // Expresión regular para validar el formato del DNI y NIE
    $patron_dni_nie = "/^[XYZ0-9][0-9]{7}[A-Za-z]$/";


    if (preg_match($patron_dni_nie, $documento)) {
        // Extraer los dígitos y la letra del DNI/NIE
        $letra = strtoupper(substr($documento, -1));

        if ($documento[0] === 'X' || $documento[0] === 'Y' || $documento[0] === 'Z') {
            // NIE: Añadir 0, 1 o 2 al inicio para el cálculo
            $digitos = ($documento[0] === 'X') ? '0' . substr($documento, 1, 7) : (($documento[0] === 'Y') ? '1' . substr($documento, 1, 7) : '2' . substr($documento, 1, 7));
        } else {
            // DNI
            $digitos = substr($documento, 0, 8);
        }

        // Calcular la letra correspondiente a los dígitos
        $letras_validas = "TRWAGMYFPDXBNJZSQVHLCKE";

        // Verificar que la letra sea válida
        $posicion_letra_valida = $digitos % 23;

        if ($letra === $letras_validas[$posicion_letra_valida]) {
            return true;
        }
    }

    return false;
}

En el mismo fichero, se ha creado una llamada a unos estilos personalizados para algunos elementos del plugin.

// Enqueue de estilos en tu archivo principal del plugin
function enqueue_plugin_styles() {
      wp_enqueue_style('dni_validator-estilos', plugins_url('estilos_dni_validator.css', __FILE__));
}

// Engancha la función para enqueue en el hook 'wp_enqueue_scripts' (no se como explicarlo más claro, jejeje)
add_action('wp_enqueue_scripts', 'enqueue_plugin_styles');

Los estilos, son muy simples, solo para mostrar unos alerts en función de si la validación es correcta o no.

// estilos_dni_validator.css

/* Estilos para el mensaje de éxito (success) */
.alert-success {
    padding: 5px;
    color: #155724;
    background-color: #d4edda;
    border-color: #c3e6cb;
    border-radius: 4px;
}

.alert-success a {
    color: #0c6624;
}

/* Estilos para el mensaje de error (danger) */
.alert-danger {
    padding: 5px;
    color: #721c24;
    background-color: #f8d7da;
    border-color: #f5c6cb;
    border-radius: 4px;
}

.alert-danger a {
    color: #491217;
}

Otro fichero importante es shortcode_dni_validator.php, donde montaremos las vistas del formulario y las repuestas que se mostrarán en función del resultado de la validación. Esto nos permitirá montar el formulario de validación en cualquier parte de nuestra web, con solo indicar el shortcode » [ dni_validator_form ]».

<?php

function shortcode_validar_dni_form() {
    ob_start();
    ?>
    <form action="" method="post">
        <label for="dni">Ingrese su DNI:</label>
        <input type="text" name="dni" id="dni" required>
        <input type="submit" name="validar" value="Validar">
    </form>

    <?php
    if (isset($_POST['validar'])) {
        $dni_ingresado = sanitize_text_field($_POST["dni"]);

        if (validar_dni_espanol($dni_ingresado)) {
            $mensaje = "El DNI $dni_ingresado es válido.";
            $clase_alert = 'success';
        } else {
            $mensaje = "El DNI $dni_ingresado no es válido.";
            $clase_alert = 'danger';
        }
        ?>
        <div class="alert alert-<?php echo esc_attr($clase_alert); ?>" role="alert">
            <?php echo esc_html($mensaje); ?>
        </div>
        <?php
    }


    $output = ob_get_clean();
    return $output;
}

add_shortcode('dni_validator_form', 'shortcode_validar_dni_form');

Por útlimo, tenemos un fichero, procesar_dni_validator.php, que se encargará de procesar el formulario y recibir el contenido del mismo.

<?php

function procesar_formulario_dni() {
    if ($_SERVER["REQUEST_METHOD"] === "POST") {
        $dni_ingresado = sanitize_text_field($_POST["dni"]);
    }
}
add_action('init', 'procesar_formulario_dni');

Ahora solo nos faltará importar estos últimos ficheros al fichero principal del plugin.

// Llamamos a las de funciones del proyecto
include('shortcode_dni_validator.php');
include('procesar_dni_validator.php');

Y ya podremos tener funcionando la validación de NIF/NIE

Formulario de validación

Podeís ver el plugin en funcionamiento en esta página y ver el código, como siempre, en mi repositorio de GitHub.

Espero que os haya parecido interesante.

Publicada el
Categorizado como Desarollo

Por Jose Manuel Sanz Prieto

Desarrollador web. En este blog hablo de fotografía, programación con Django, Python, PHP y privacidad.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *