Как создать простой плагин для WordPress

Как создать простой плагин для WordPress

Плагины помогают расширяют функциональность движка WordPress, их легко установить и управлять ими из панели администрирования. Для использования подавляющего большинства плагинов, нет необходимости в знаниях программирования.

Уже существуют тысячи готовых плагинов, покрывающие почти все задачи при создании сайтов. Но бывают ситуации, когда функционала готового плагина не хватает или плагин перестал развиваться много лет назад (такое довольно часто бывает) и не поддерживается современными версиями Вордпресса и PHP.

Как быть в таком случае? Сделать собственный плагин или доработать существующий, а для этого необходимо иметь представление как устроены плагины в Вордпресс.

В этом уроке я покажу, как вы можете создать простой плагин WordPress.

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

UPD. В конце я все-таки покажу пример супер простого плагина.

Так же предполагается что вы имеете представление о том как работать с БД из Вордпресса, в примерах ниже мы обращаемся к методам класса 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>

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

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

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

Наш плагин активирован и работает

Совсем простой плагин

Кстати плагин не обязательно должен иметь пункт в меню, добавлять таблицу в базу данных и состоять из нескольких файлов.

Я сначала не хотел, но решил привести пример совсем простого плагина состоящего из одного файла и нескольких строчек кода.

Для примера добавим внизу каждой записи блога текст «Спасибо, что прочитали до конца!». Это конечно можно сделать прямо в шаблоне или в файле functions.php, но тогда мы будем завесить от темы, поэтому это удобней реализовать в виде плагина.

Назовем плагин «Говорим спасибо», для его реализации нам понадобиться небольшой файл содержащий следующий код:

<?php
/*
 * Plugin Name: Говорим спасибо
 */

add_filter('the_content', 'the_end');
function the_end( $text ){
    return $text . '<p>Спасибо, что прочитали до конца!</p>';
}

Сохраните файл wp-content/plugins/thanks/thanks.php и все, плагин готов. Остается только активировать его и теперь после каждого текста в посте появляется нужная нам запись.

Хостинг для ваших проектов