Плагин будет состоять из нескольких файлов и работать с базой данных. Предполагается что вы имеете представление о том как работать с БД из Вордпресса, в примерах ниже мы обращаемся к методам класса 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> </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> </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/
Потрясающе Веб-сайт, Продолжайте в том же духе отлично работа. Большое спасибо.
Шикарная статья, куча полезной инфы, несмотря на скромные размеры статьи.