WordPress. Создание плагина

Плагин будет состоять из нескольких файлов и работать с базой данных. Предполагается что вы имеете представление о том как работать с БД из Вордпресса, в примерах ниже мы обращаемся к методам класса wpdb через глобальную переменную $wpdb.

Что будет делать наш плагин? Он будет хранить базу подписчиков, мы сможем просматривать подписчиков в виде таблицы, удалять их и добавлять.

Подготовка. Создаем каталог и необходимые файлы

Все плагины WordPress храняться в папке wp-content/plugins/. Назовем наш плагин «Мой первый плагин», он будет располагаться в каталоге wp-content/plugins/myfirstplugin. Создадим в каталоге нашего плагина 3 файла:

myfirstplugin.php – это главный файл плагина, он отвечает за активацию/деактивацию плагина, создает таблицу в базе данных, отвечает за отображение главной страницы плагина в панеле администирования.

displaylist.php – Выводит записи из базы данных

addentry.php – Добавляет запись в таблицу.

Файл myfirstplugin.php

Это главный файл нашего плагина. Его содержимое ниже:

<?php

/*
   Plugin Name: Мой первый плагин
   Plugin URI: https://tretyakov.net
   description: Простой плагин для работы с подписчиками на рассылку
   Version: 1.0.0
   Author: Александр Третьяков
   Author URI: https://tretyakov.net
*/

// Создаем таблицу
function myfirstplugin_table()
{

    global $wpdb;

    $charset_collate = $wpdb->get_charset_collate();

    $tablename = $wpdb->prefix . "myfirstplugin";

    $sql = "CREATE TABLE $tablename (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(255) NOT NULL,
  email varchar(255) NOT NULL,
  PRIMARY KEY  (id)
  ) $charset_collate;";

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

}

register_activation_hook(__FILE__, 'myfirstplugin_table');

// Добавляем меню
function myfirstplugin_menu()
{

    add_menu_page("Мой первый плагин", "Мой первый плагин", "manage_options",
        "myfirstplugin", "displayList", "dashicons-email-alt");
    add_submenu_page("myfirstplugin", "Все подписчики", "Все подписчики", "manage_options",
        "allentries", "displayList");
    add_submenu_page("myfirstplugin", "Добавить подписчика", "Добавить подписчика",
        "manage_options", "addnewentry", "addEntry");
    remove_submenu_page('myfirstplugin','myfirstplugin');
}

add_action("admin_menu", "myfirstplugin_menu");


// Создадим функции вывода списка подписчиков и добавления нового
function displayList()
{
    include "displaylist.php";
}

function addEntry()
{
    include "addentry.php";
}

В начале файла в комментариях  /* */ необходимо указать данные плагина такие как Название, Описание, Автор, Версия и т. д.

Определяем функцию myfirstplugin_table (), где создаем новую таблицу в БД для хранения подписчиков.

Задаем имя таблицы с префиксом и подготавливаем MYSQL запрос на создание таблицы.

Инклудим файл upgrade.php передаем подготовленный запрос в функцию dbDelta ().

И вешаем функцию myfirstplugin_table() на хук register_activation_hook().

Теперь добавим меню и подменю в админке для нашего плагина.

Мы создадим отдельный пункт в панели администратора, иконку для пункта мы возьмем из стандартного набора https://developer.wordpress.org/resource/dashicons/#email-alt

Обратите внимание, что в методе add_submenu_page() мы вызывали функции displaylist() и addEntry(), их мы создали в конце.

Кстати, если сейчас прейти в раздел плагины, мы уже увидим наш плагин в списках установленных.

Пока не будем активировать его, а перейдем к созданию следующих файлов.

Файл displaylist.php

Создадим в папке нашего плагина файл displaylist.php, в нем мы будем извлекать данные из нашей таблицы myfirstplugin, выводить их на экран и удалять по нажатию на ссылку «Удалить».

<?php

global $wpdb;
$tablename = $wpdb->prefix."myfirstplugin";

// Удаляем подписчика
if(isset($_GET['delete_id'])){
    $delid = $_GET['delete_id'];
    $wpdb->query("DELETE FROM ".$tablename." WHERE id=".$delid);
}
?>
<h1>Все подписчики</h1>

<table width='100%' border='1' style='border-collapse: collapse;'>
    <tr>
        <th>№</th>
        <th>Имя</th>
        <th>Email</th>
        <th>&nbsp;</th>
    </tr>
    <?php
    // Получаем записи и, если они есть, выводим
    $entriesList = $wpdb->get_results("SELECT * FROM ".$tablename." order by id desc");
    if(count($entriesList) > 0){
        $count = 1;
        foreach($entriesList as $entry){
            $id = $entry->id;
            $name = $entry->name;
            $email = $entry->email;

            echo "<tr>
      <td>".$count."</td>
      <td>".$name."</td>
      <td>".$email."</td>
      <td><a href='?page=allentries&delete_id=".$id."'>Удалить</a></td>
      </tr>
      ";
            $count++;
        }
    }else{
        echo "<tr><td colspan='5'>Нет подписчиков</td></tr>";
    }
    ?>
</table>

Файл addentry.php

Дальше создаем файл addentry.php, который отвечает за добавление записей в базу данных. Он буде выводить html форму, а при нажатии кнопки «Сохранить», отправлять данные в базу.

<?php

global $wpdb;

// Добавляем подписчика
if(isset($_POST['submit'])){

    $name = $_POST['name'];
    $email = $_POST['email'];
    $tablename = $wpdb->prefix."myfirstplugin";

    if($name != '' && $email != ''){
        // Проверяем по полю email есть ли такой подписчик
        $check_data = $wpdb->get_results("SELECT * FROM ".$tablename." WHERE email='".$email."' ");
        if(count($check_data) == 0){
            $insert_sql = "INSERT INTO ".$tablename."(name,email) values('".$name."','".$email."') ";
            $wpdb->query($insert_sql);
            echo "Подписчик добавлен!";
        }
    }
}

?>
<h1>Добавить подписчика</h1>
<form method='post' action=''>
    <table>
        <tr>
            <td>Имя</td>
            <td><input type='text' name='name'></td>
        </tr>
        <tr>
            <td>Email</td>
            <td><input type='text' name='email'></td>
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td><input type='submit' name='submit' value='Добавить'></td>
        </tr>
    </table>
</form>

Работа с плагином

Теперь вернемся в список наших плагинов и нажмем «Активировать». Теперь у нас есть пункт в админке и мы сможем удобно работать с нашим плагином.

Другие примеры плагинов

По этим ссылкам вы найдёте примеры других плагинов с более широким функционалом, разделением на шорткоды и виджеты.

https://habr.com/ru/articles/147699/

https://webformyself.com/realnyj-primer-razrabotki-plagina-dlya-wordpress/

2 комментария

  1. Потрясающе Веб-сайт, Продолжайте в том же духе отлично работа. Большое спасибо.

  2. Шикарная статья, куча полезной инфы, несмотря на скромные размеры статьи.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *