Rest api

Własny plugin WordPress wystawiający punkt Rest API

W kilku wcześniejszych wpisach poruszałem kwestie dodawania aplikacji Vue do WordPressa w formie wtyczki oraz tworzenia pluginu posiadającego dostęp do bazy danych strony WordPress. W dzisiejszym wpisie stworzymy wtyczkę z pomocą której dodamy dane do bazy danych WordPressa i wystawimy te dane jako endpoint Rest API. Wtyczka będzie umożliwiała dodawanie pytań i odpowiedzi do quizzu czy też testu, który mógłby być użyty na platformie e-learningowej. Mechanizm, który stworzymy, będzie można użyć do stworzenia dowolnego API wystawiającego dane na zewnątrz.

Na początek przygotujemy zaplecze (backend) naszej wtyczki. Nazwijmy ją web-workshop-quiz-plugin. Jak już wiemy, w tym celu w katalogu WordPressa /wp-content/plugins zakładamy podkatalog web-workshop-quiz-plugin, a w nim umieszczamy plik PHP o identycznej nazwie, czyli web-workshop-quiz-plugin.php.

Nagłówek naszego głównego pliku wtyczki wygląda następująco.

<?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
*/

Wykorzystamy dobrze nam już znaną strukturę plików z poprzedniego przykładu, którą lekko zmodyfikujemy:

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

Podobnie jak wcześniej, w katalogu /includes umieścimy logikę związaną z obsługą bazy danych, natomiast w katalogu /templates znajdą się szablony formularzy oraz listy wyświetlające pytania i odpowiedzi. Pozostałe katalogi omówimy później, w miarę rozwoju wtyczki. Zaczynamy od bazy danych — dodajemy znany już z poprzednich wpisów kod:

<?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
}

Funkcja register_activation_hook( string $file, callable $callback ), którą omawialiśmy wcześniej, wykonywana jest w momencie aktywacji wtyczki. Kod odpowiedzialny za utworzenie tabeli w bazie danych umieścimy w katalogu /includes.

Zanim jednak przejdziemy do pisania kodu, zatrzymajmy się na chwilę. To dobry moment, aby zastanowić się nad strukturą danych naszej wtyczki. W tabeli będziemy potrzebować następujących kolumn:

  • id – wartość liczbowa
  • pytanie – ciąg znaków
  • odpowiedź1 – ciąg znaków
  • odpowiedź2 – ciąg znaków
  • odpowiedź3 – ciąg znaków
  • odpowiedź4 – ciąg znaków
  • prawidłowa odpowiedź – wartość liczbowa

Tworzymy plik w którym utworzymy bazę danych. Nazwijmy go 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);

}

Zauważmy, że nazwę każdej funkcji rozpoczynamy prefiksem ww (od nazwy witryny). Robimy to w celu uniknięcia konfliktów z innymi funkcjami w kodzie WordPressa. Ponieważ większość tworzonych przez nas funkcji ma zasięg globalny, prefiksowanie jest dobrą praktyką zalecaną przez WordPressa. Funkcję tworzącą tabelę dodajemy i wywołujemy w pliku web-workshop-quiz-plugin.php. Po aktywacji wtyczki tabela w bazie danych zostanie automatycznie utworzona. Funkcję tworzącą tabelę dodajemy i wywołujemy w pliku 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();
}

W tym momencie, korzystając z phpMyAdmina, możemy odnaleźć tabelę ww_quizz_questions i ręcznie dodać pytania oraz odpowiedzi quizu. Teraz utwórzmy odpowiedni endpoint w naszej instalacji WordPressa, który udostępni dane z bazy. W katalogu /api tworzymy plik 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;
   
}

Po dodaniu do adresu naszej strony ścieżki: “/wp-json/quizz-api/v1/source” w przeglądarce powinny wyświetlić się dane quizu w formacie JSON.