close up photo of person typing on laptop

Cómo crear un plugin para la API REST de WordPress con operaciones CRUD en una tabla personalizada

¡Crea tu propio plugin en WordPress para manipular datos personalizados con la API REST! Nuestro tutorial paso a paso te guiará a través de la creación de un endpoint que permite operaciones CRUD en una tabla personalizada. Aprende cómo crear, leer, actualizar y eliminar datos de forma flexible y segura. ¡Impulsa la funcionalidad y la eficiencia de tu sitio web con esta poderosa herramienta!
close up photo of person typing on laptop
Photo by Christina Morillo on Pexels.com

Te has puesto a pensar como hay plugins como Jetpack CRM, Yoast SEO, Gravity Forms o otros muchos plugins pueden añadir a la REST API de WordPress sus Endpoints a la API nativa de WordPress bueno pues en este en este tutorial revisaremos como crear un plugin para la API REST de WordPress con operaciones CRUD en una tabla personalizada, Aquí hay algunos beneficios de crear un plugin en WordPress que agregue un endpoint a la API REST y permita realizar operaciones CRUD en una tabla personalizada:

  1. Flexibilidad y personalización: Al crear un plugin personalizado, tienes el control total sobre las operaciones CRUD en tu tabla personalizada. Puedes definir las rutas, los métodos y los parámetros según tus necesidades específicas.
  2. Integración con otros sistemas: Al utilizar la API REST de WordPress, puedes integrar tu tabla personalizada con otros sistemas y aplicaciones. Esto te permite compartir datos de forma fácil y segura con otras plataformas, como aplicaciones móviles, sistemas de gestión de contenidos externos, sistemas de comercio electrónico y más.
  3. Automatización de tareas: Al proporcionar un endpoint de la API REST para tu tabla personalizada, puedes automatizar la creación, lectura, actualización y eliminación de datos. Esto puede ahorrarte tiempo y esfuerzo al eliminar la necesidad de realizar estas tareas manualmente.
  4. Acceso a los datos desde cualquier lugar: La API REST te permite acceder a tus datos desde cualquier lugar a través de solicitudes HTTP. Esto significa que puedes realizar operaciones CRUD en tu tabla personalizada desde aplicaciones, servicios web o incluso desde otros sitios web.
  5. Escalabilidad y modularidad: Al utilizar la API REST, tu tabla personalizada se convierte en un recurso independiente que puede ser escalado y utilizado en diferentes contextos. Puedes agregar más endpoints y funcionalidades según sea necesario, lo que te brinda una mayor flexibilidad para adaptarte a futuros cambios y requerimientos.
  6. Mejora del rendimiento: Al utilizar la API REST en lugar de acceder directamente a la base de datos, puedes aprovechar la caché y las optimizaciones de rendimiento integradas en WordPress. Esto puede resultar en una mejor respuesta y tiempos de carga más rápidos para tus operaciones CRUD.
  7. Seguridad y control de acceso: Puedes aplicar autenticación y control de permisos en tus endpoints de la API REST para garantizar que solo los usuarios autorizados puedan acceder y manipular los datos en tu tabla personalizada. Esto te brinda un mayor control sobre la seguridad de tus datos.

En resumen, al crear un plugin que agregue un endpoint a la API REST de WordPress para manipular datos en una tabla personalizada, obtienes flexibilidad, integración con otros sistemas, automatización de tareas, acceso desde cualquier lugar, escalabilidad, mejor rendimiento, seguridad y control de acceso. Estos beneficios pueden mejorar significativamente la funcionalidad y la eficiencia de tu sitio web o aplicación basada en WordPress.

Paso 1: Preparación del entorno

  1. Crea una carpeta en la ubicación wp-content/plugins de tu instalación de WordPress. Puedes darle el nombre que desees, por ejemplo, “rest-api-clientes”.
  2. Dentro de la carpeta recién creada, crea un archivo llamado rest-api-clientes.php. Este será el archivo principal de nuestro plugin.

Paso 2: Creación de la tabla en la base de datos

  1. Abre el archivo rest-api-clientes.php en tu editor de código y agrega el siguiente código al principio del archivo:
<?php
/*
Plugin Name: REST API Clientes
Description: Este plugin agrega un endpoint a la API REST de WordPress para manipular datos de la tabla de clientes.
Version: 1.0
Author: Tu Nombre
*/
// Función para crear la tabla de clientes al activar el plugin
function crear_tabla_clientes() {
    global $wpdb;
    $tabla_clientes = $wpdb->prefix . 'clientes';
    // Definir la estructura de la tabla
    $sql = "CREATE TABLE $tabla_clientes (
        id INT NOT NULL AUTO_INCREMENT,
        nombre VARCHAR(255),
        correo_electronico VARCHAR(255),
        telefono VARCHAR(20),
        PRIMARY KEY (id)
    )";
    // Incluir el archivo necesario para ejecutar dbDelta()
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    // Crear o modificar la tabla en la base de datos
    dbDelta( $sql );
}
// Agregar la acción para crear la tabla de clientes al activar el plugin
register_activation_hook( __FILE__, 'crear_tabla_clientes' );

Este código crea la estructura de la tabla clientes en la base de datos utilizando la función dbDelta(). La tabla tendrá cuatro columnas: id (clave primaria autoincremental), nombre, correo_electronico y telefono. La función crear_tabla_clientes() se ejecutará cuando se active el plugin y creará la tabla.

Paso 3: Registro del endpoint de la API REST

  1. A continuación, agregaremos el código para registrar el endpoint de la API REST y definir las operaciones CRUD. Agrega el siguiente código después del bloque de código anterior:
// Función para obtener un cliente por ID
function obtener_cliente( $request ) {
    global $wpdb;
    $tabla_clientes = $wpdb->prefix . 'clientes';
    $id = $request['id'];
    // Obtener el cliente de la base de datos
    $cliente = $wpdb->get_row( "SELECT * FROM $tabla_clientes WHERE id = $id" );
    return $cliente;
}
// Función para crear un cliente
function crear_cliente( $request ) {
    global $wpdb;
    $tabla_clientes = $wpdb->prefix . 'clientes';
    $cliente = array(
        'nombre' => $request->get_param( 'nombre' ),
        'correo_electronico' => $request->get_param( 'correo_electronico' ),
        'telefono' => $request->get_param( 'telefono' ),
    );
    // Insertar el cliente en la base de datos
    $wpdb->insert( $tabla_clientes, $cliente );
    // Devolver el ID del nuevo cliente
    return $wpdb->insert_id;
}
// Función para actualizar un cliente por ID
function actualizar_cliente( $request ) {
    global $wpdb;
    $tabla_clientes = $wpdb->prefix . 'clientes';
    $id = $request['id'];
    $cliente = array(
        'nombre' => $request->get_param( 'nombre' ),
        'correo_electronico' => $request->get_param( 'correo_electronico' ),
        'telefono' => $request->get_param( 'telefono' ),
    );
    // Actualizar el cliente en la base de datos
    $wpdb->update( $tabla_clientes, $cliente, array( 'id' => $id ) );
    // Devolver la cantidad de filas afectadas
    return $wpdb->rows_affected;
}
// Función para eliminar un cliente por ID
function eliminar_cliente( $request ) {
    global $wpdb;
    $tabla_clientes = $wpdb->prefix . 'clientes';
    $id = $request['id'];
    // Eliminar el cliente de la base de datos
    $wpdb->delete( $tabla_clientes, array( 'id' => $id ) );
    // Devolver la cantidad de filas afectadas
    return $wpdb->rows_affected;
}
// Función para registrar el endpoint de la API REST
function registrar_endpoint_rest_clientes() {
    register_rest_route( 'clientes/v1', '/(?P<id>\d+)', array(
        'methods' => WP_REST_Server::READABLE,
        'callback' => 'obtener_cliente',
        'args' => array(
            'id' => array(
                'validate_callback' => function( $param, $request, $key ) {
                    return is_numeric( $param );
                }
            ),
        ),
    ) );
    register_rest_route( 'clientes/v1', '/', array(
        'methods' => WP_REST_Server::CREATABLE,
        'callback' => 'crear_cliente',
    ) );
    register_rest_route( 'clientes/v1', '/(?P<id>\d+)', array(
        'methods' => WP_REST_Server::EDITABLE,
        'callback' => 'actualizar_cliente',
        'args' => array(
            'id' => array(
                'validate_callback' => function( $param, $request, $key ) {
                    return is_numeric( $param );
                }
            ),
        ),
    ) );
    register_rest_route( 'clientes/v1', '/(?P<id>\d+)', array(
        'methods' => WP_REST_Server::DELETABLE,
        'callback' => 'eliminar_cliente',
        'args' => array(
            'id' => array(
                'validate_callback' => function( $param, $request, $key ) {
                    return is_numeric( $param );
                }
            ),
        ),
    ) );
}
add_action( 'rest_api_init', 'registrar_endpoint_rest_clientes' );

Este código define las funciones obtener_cliente(), crear_cliente(), actualizar_cliente() y eliminar_cliente(), que corresponden a las operaciones de lectura, creación, actualización y eliminación respectivamente. Estas funciones utilizan la instancia de la clase wpdb para interactuar con la tabla clientes en la base de datos.

Luego, la función registrar_endpoint_rest_clientes() se encarga de registrar el endpoint de la API REST utilizando register_rest_route(). Se definen las rutas y los métodos para cada operación.

Paso 4: Prueba de la API REST

  1. Ahora que hemos registrado el endpoint de la API REST, podemos probarlo. Asegúrate de que el plugin esté activo en tu instalación de WordPress.
  2. Para obtener un cliente por ID, puedes hacer una solicitud GET a la siguiente URL en tu navegador: http://tusitio.com/wp-json/clientes/v1/1
    • Reemplaza “tusitio.com” con la URL de tu sitio web y “1” con el ID del cliente que deseas obtener. Deberías recibir los datos del cliente en formato JSON.
  3. Para crear un cliente, puedes hacer una solicitud POST a la siguiente URL utilizando una herramienta como Postman: http://tusitio.com/wp-json/clientes/v1/
    • Asegúrate de enviar los parámetros requeridos (nombre, correo_electronico y telefono) en el cuerpo de la solicitud en formato JSON.
  4. Para actualizar un cliente por ID, puedes hacer una solicitud PUT a la siguiente URL utilizando una herramienta como Postman: http://tusitio.com/wp-json/clientes/v1/1
    • Reemplaza “tusitio.com” con la URL de tu sitio web y “1” con el ID del cliente que deseas actualizar. Asegúrate de enviar los parámetros requeridos (nombre, correo_electronico y telefono) en el cuerpo de la solicitud en formato JSON.
  5. Para eliminar un cliente por ID, puedes hacer una solicitud DELETE a la siguiente URL utilizando una herramienta como Postman: http://tusitio.com/wp-json/clientes/v1/1
    • Reemplaza “tusitio.com” con la URL de tu sitio web y “1” con el ID del cliente que deseas eliminar.

Código Completo

<?php
/*
Plugin Name: REST API Clientes
Description: Este plugin agrega un endpoint a la API REST de WordPress para manipular datos de la tabla de clientes.
Version: 1.0
Author: Tu Nombre
*/
// Función para crear la tabla de clientes al activar el plugin
function crear_tabla_clientes() {
    global $wpdb;
    $tabla_clientes = $wpdb->prefix . 'clientes';
    // Definir la estructura de la tabla
    $sql = "CREATE TABLE $tabla_clientes (
        id INT NOT NULL AUTO_INCREMENT,
        nombre VARCHAR(255),
        correo_electronico VARCHAR(255),
        telefono VARCHAR(20),
        PRIMARY KEY (id)
    )";
    // Incluir el archivo necesario para ejecutar dbDelta()
    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    // Crear o modificar la tabla en la base de datos
    dbDelta( $sql );
}
// Agregar la acción para crear la tabla de clientes al activar el plugin
register_activation_hook( __FILE__, 'crear_tabla_clientes' );

// Función para obtener un cliente por ID
function obtener_cliente( $request ) {
    global $wpdb;
    $tabla_clientes = $wpdb->prefix . 'clientes';
    $id = $request['id'];
    // Obtener el cliente de la base de datos
    $cliente = $wpdb->get_row( "SELECT * FROM $tabla_clientes WHERE id = $id" );
    return $cliente;
}
// Función para crear un cliente
function crear_cliente( $request ) {
    global $wpdb;
    $tabla_clientes = $wpdb->prefix . 'clientes';
    $cliente = array(
        'nombre' => $request->get_param( 'nombre' ),
        'correo_electronico' => $request->get_param( 'correo_electronico' ),
        'telefono' => $request->get_param( 'telefono' ),
    );
    // Insertar el cliente en la base de datos
    $wpdb->insert( $tabla_clientes, $cliente );
    // Devolver el ID del nuevo cliente
    return $wpdb->insert_id;
}
// Función para actualizar un cliente por ID
function actualizar_cliente( $request ) {
    global $wpdb;
    $tabla_clientes = $wpdb->prefix . 'clientes';
    $id = $request['id'];
    $cliente = array(
        'nombre' => $request->get_param( 'nombre' ),
        'correo_electronico' => $request->get_param( 'correo_electronico' ),
        'telefono' => $request->get_param( 'telefono' ),
    );
    // Actualizar el cliente en la base de datos
    $wpdb->update( $tabla_clientes, $cliente, array( 'id' => $id ) );
    // Devolver la cantidad de filas afectadas
    return $wpdb->rows_affected;
}
// Función para eliminar un cliente por ID
function eliminar_cliente( $request ) {
    global $wpdb;
    $tabla_clientes = $wpdb->prefix . 'clientes';
    $id = $request['id'];
    // Eliminar el cliente de la base de datos
    $wpdb->delete( $tabla_clientes, array( 'id' => $id ) );
    // Devolver la cantidad de filas afectadas
    return $wpdb->rows_affected;
}
// Función para registrar el endpoint de la API REST
function registrar_endpoint_rest_clientes() {
    register_rest_route( 'clientes/v1', '/(?P<id>\d+)', array(
        'methods' => WP_REST_Server::READABLE,
        'callback' => 'obtener_cliente',
        'args' => array(
            'id' => array(
                'validate_callback' => function( $param, $request, $key ) {
                    return is_numeric( $param );
                }
            ),
        ),
    ) );
    register_rest_route( 'clientes/v1', '/', array(
        'methods' => WP_REST_Server::CREATABLE,
        'callback' => 'crear_cliente',
    ) );
    register_rest_route( 'clientes/v1', '/(?P<id>\d+)', array(
        'methods' => WP_REST_Server::EDITABLE,
        'callback' => 'actualizar_cliente',
        'args' => array(
            'id' => array(
                'validate_callback' => function( $param, $request, $key ) {
                    return is_numeric( $param );
                }
            ),
        ),
    ) );
    register_rest_route( 'clientes/v1', '/(?P<id>\d+)', array(
        'methods' => WP_REST_Server::DELETABLE,
        'callback' => 'eliminar_cliente',
        'args' => array(
            'id' => array(
                'validate_callback' => function( $param, $request, $key ) {
                    return is_numeric( $param );
                }
            ),
        ),
    ) );
}
add_action( 'rest_api_init', 'registrar_endpoint_rest_clientes' );

Conclusion

¡Felicitaciones! Ahora tienes un plugin que agrega un endpoint a la API REST de WordPress para realizar operaciones CRUD en una tabla personalizada. Puedes personalizar y ampliar este plugin según tus necesidades.

Recuerda que es importante tener precaución al trabajar con la API REST y asegurarte de proteger tus endpoints de manera adecuada, utilizando autenticación y control de permisos según sea necesario.

Espero que este tutorial te haya sido útil y te haya brindado una comprensión clara de cómo crear un plugin para la API REST de WordPress con operaciones CRUD en una tabla personalizada.

Suscripción al Newsletter

Si estás interesado en aprender más sobre WordPress, no olvides suscribirte a nuestro blog para recibir las últimas noticias y consejos sobre WordPress, alojamiento web.

¿Necesitas un Hosting para tu Web?

Anuncio - Hosting Web de SiteGround - Diseñado para una fácil administración web. Haz clic para saber más.

Anuncio - Hosting Web de SiteGround - Diseñado para una fácil administración web. Haz clic para saber más.

¿Necesitas ayuda con un Proyecto Web o un Plugin a Medida?

Si ¿Necesitas ayuda con algún proyecto web? No dudes en contactarme desarrollo soluciones completas y personalizadas con WordPress y PHP, con herramientas y procesos modernos, utilizando HTML, CSS, SCSS, PHP, JavaScript, Bootstrap y más… Si ¿Estás listo? ¡Envíame un mensaje y hablemos de tu proyecto web!