Rest api

Plugin propio de WordPress que expone un endpoint de la API REST

En varias entradas anteriores traté cuestiones relacionadas con la adición de aplicaciones Vue a WordPress en forma de plugin, así como la creación de un plugin con acceso a la base de datos del sitio WordPress. En la entrada de hoy crearemos un plugin con cuya ayuda añadiremos datos a la base de datos de WordPress y expondremos dichos datos como un endpoint de la API REST. El plugin permitirá añadir preguntas y respuestas a un cuestionario o test que podría utilizarse en una plataforma de e-learning. El mecanismo que crearemos podrá utilizarse para crear cualquier API que exponga datos al exterior.

Para comenzar, prepararemos el backend de nuestro plugin. Lo llamaremos web-workshop-quiz-plugin. Como ya sabemos, para ello en el directorio de WordPress /wp-content/plugins creamos un subdirectorio web-workshop-quiz-plugin, y dentro de él colocamos un archivo PHP con el mismo nombre, es decir, web-workshop-quiz-plugin.php.

El encabezado de nuestro archivo principal del plugin es el siguiente.

<?php
/*
Plugin Name: Web Workshop quiz-plugin
Description: Quiz plugin - just add question and answers, then add shortcode in your page
Version: 1.0
Author: Your Name
*/

Utilizaremos la estructura de archivos que ya conocemos del ejemplo anterior, la cual modificaremos ligeramente:

>api
>includes
>templates
>model
>templates
web-workshop-quiz-plugin.php

Al igual que antes, en el directorio /includes colocaremos la lógica relacionada con el manejo de la base de datos, mientras que en el directorio /templates se encontrarán las plantillas de formularios y las listas que muestran las preguntas y respuestas. Los demás directorios los comentaremos más adelante, a medida que se vaya desarrollando el plugin. Comenzamos con la base de datos: añadimos el código ya conocido de entradas anteriores:

<?php
/*
Plugin Name: Web Workshop quiz-plugin
Description: Quiz plugin - just add question and answers, then add shortcode in your page
Version: 1.0
Author: Your Name
*/

register_activation_hook(__FILE__, 'ww_qa_activate');

function ww_qa_activate()
{
  //tutaj dodamy kod tworzący naszą bazę danych
}

La función register_activation_hook( string $file, callable $callback ), que comentamos anteriormente, se ejecuta en el momento de activar el plugin. El código responsable de crear la tabla en la base de datos lo colocaremos en el directorio /includes.

Antes de pasar a escribir el código, detengámonos un momento. Es un buen momento para reflexionar sobre la estructura de datos de nuestro plugin. En la tabla necesitaremos las siguientes columnas:

  • id – valor numérico
  • pregunta – cadena de texto
  • respuesta1 – cadena de texto
  • respuesta2 – cadena de texto
  • respuesta3 – cadena de texto
  • respuesta4 – cadena de texto
  • respuesta_correcta – valor numérico

Creamos el archivo en el que configuraremos la base de datos. Lo llamaremos ww-quiz-data-base-setup.php.

<?php

function ww_quiz_create_table()
{
global $wpdb;
$table_name1 = $wpdb->prefix . 'ww_quizz_questions';
$charset_collate = $wpdb->get_charset_collate();

 $sql1 = "CREATE TABLE $table_name1 (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        question text NOT NULL,
        answer1 text NOT NULL,
        answer2 text NOT NULL,
        answer3 text NOT NULL,
        answer4 text NOT NULL,
        correct_answer mediumint(9) NOT NULL,
        PRIMARY KEY  (id))
        ENGINE=InnoDB {$charset_collate};";

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql1);

}

Observemos que el nombre de cada función comienza con el prefijo ww (del nombre del sitio). Hacemos esto para evitar conflictos con otras funciones en el código de WordPress. Dado que la mayoría de las funciones que creamos tienen alcance global, el uso de prefijos es una buena práctica recomendada por WordPress. La función que crea la tabla se añade y se llama en el archivo web-workshop-quiz-plugin.php. Tras la activación del plugin, la tabla en la base de datos se creará automáticamente. La función que crea la tabla se añade y se ejecuta en el archivo web-workshop-quiz-plugin.php.

<?php
/*
Plugin Name: Web Workshop quiz-plugin
Description: Quiz plugin - just add question and answers, then add shortcode in your page
Version: 1.0
Author: Your Name
*/

register_activation_hook(__FILE__, 'ww_qa_activate');

function ww_qa_activate()
{
    require_once plugin_dir_path(__FILE__) . 'includes/ww-quiz-data-base-setup.php';
    ww_quiz_create_table();
}

En este momento, utilizando phpMyAdmin, podemos localizar la tabla ww_quizz_questions y añadir manualmente las preguntas y respuestas del cuestionario. Ahora creemos el endpoint correspondiente en nuestra instalación de WordPress, que pondrá a disposición los datos de la base de datos. En el directorio /api creamos el archivo ww_quiz_questions_endpoint.php:

<?php
register_rest_route('quizz-api/v1', '/source', array(
    'methods' => 'GET',
    'callback' => 'ww_handle_get_all1',
));



function ww_handle_get_all1($data)
{
     global $wpdb;
     $table_name = $wpdb->prefix . "ww_quizz_questions";
     $question = $wpdb->get_results("SELECT * FROM $table_name );

     return $question;
   
}

Tras añadir a la dirección de nuestro sitio la ruta “/wp-json/quizz-api/v1/source”, en el navegador deberían mostrarse los datos del cuestionario en formato JSON.