Создание плагина WordPress для начинающих

Updated 25 June 2022

В этом уроке вы узнаете про создание плагина WordPress, рассмотрим лучшие практики и стандарты кода при создании плагинов.

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

Зачем плагины?

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

Хотя существует масса бесплатных и премиум-плагинов на выбор, могут возникнуть случаи, когда вам понадобятся специфические функции WordPress, которых нет в наличии. Для этого вам может понадобиться создать свой собственный плагин WordPress. О чем мы и поговорим.

Данная статья в первую очередь будет полезна начинающим разработчикам WordPress. Кроме того, в этой статье мы рассмотрим различия между плагином и темой и то, как они работают на платформе WordPress.

Что нужно для создания плагина

Вот что вам понадобится для создания плагина WordPress:

  • Текстовый редактор или IDE
  • FTP-доступ к вашему хостинг-аккаунту или локальный сервер
  • Работающая установка WordPress

Для написания кода плагина вам понадобится текстовый редактор или IDE (среда разработки). Среди наиболее популярных HTML-редакторов можно назвать Notepad++ и Atom. Я пользуюсь бесплатной версией Sublime Text 3 и Visual Studio Code от Microsoft.

После установки текстового редактора подключите его к вашему FTP-серверу для работы с кодом. В следующей статье я расскажу про подключение к FTP с помощью Notepad++ и других редакторов кода.

Затем настройте FTP-клиент для загрузки файлов плагина на ваш сайт. Рекомендую использовать FTP-приложение FileZilla, так как оно простое в настройке и многие пользуются данной программой. Кроме того, вы можете использовать программу WinSCP. Последнее время чаще всего я пользуюсь ей.

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

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

Плагины или темы

Функциональность сайта WordPress можно изменить с помощью и плагинов и тем. Темы WordPress имеют файл functions.php, хранящийся в папке /wp-includes/, который позволяет добавлять пользовательский код для новых функций.

Основной файл functions.php темы находится в корне папки темы и многие разработчики добавляют функциональность через него. Что не всегда хорошо. Хотя этот метод подходит для небольших изменений, он непрактичен для внесения серьезных изменений, которые затрагивают весь сайт.

Это связано с тем, что функциональность, хранящаяся в файле functions.php, зависит от того, активна тема или нет. Отключение темы WordPress вернет изменения, внесенные в указанный файл, и вызовет ошибку, когда сайт обратится к отсутствующим функциям.

Если вы не используете дочернюю тему, обновление темы также перезапишет файл functions.php, что заставит вас вручную восстанавливать пользовательский код WordPress.

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

Вы можете добавить плагины WordPress к любой установке WordPress. Функции, внедренные плагином, останутся функциональными, даже если вы смените тему. Кроме того, обновления не будут перезаписывать существующие функции, что сэкономит ваше время и усилия.

Что такое хуки WordPress?

Плагины WordPress взаимодействуют с основным кодом с помощью хуков (крючков). Существует два разных типа хуков WordPress:

  • Хуки действий (экшенов) — добавление или удаление функций
  • Хуки фильтров — изменяют данные, созданные функциями

На английском языке в руководствах они называются Action hooks (действия) и Filter hooks (фильтры). В дальнейшем мы часто будем использовать эти два слова – экшены и фильтры.

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

Действия и хуки действий

Действие (action) – это функция PHP, вызываемая через определенный хук действия при посещении пользователем страницы WordPress. Веб-разработчики могут добавлять собственные функции в список действий или удалять уже существующие, добавляя скрипт хука действия wp_head() перед закрывающим тегом (</head>) любой страницы.

Хуки действий являются контекстными, что означает, что не все страницы WordPress вызывают их. На странице WordPress Plugin Action Reference представлен полный список хуков действий и контекстов, в которых они вызываются.

Добавление функций в хук действия с помощью add_action()

Добавление функций к хуку действия в файле плагина требует вызова функции add_action() как минимум с двумя параметрами.

// Хук для действия 'init', которое вызывается после того, как WordPress закончит загрузку основного кода

add_action( 'init', 'add_Cookie' );

// Установка cookie с текущим временем суток

function add_Cookie() {
 setcookie("last_visit_time", date("r"), time()+60*60*24*30, "/");
}

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

Первый параметр – это имя хука действия, к которому вы хотите прикрепить обратную функцию (callback-функцию или функция обратного вызова), а второй параметр содержит имя функции, которую вы хотите запустить.

Справка. Callback (англ. call — вызов, англ. back — обратный) или функция обратного вызова в программировании — передача исполняемого кода в качестве одного из параметров другого кода.

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

Пример кода плагина для отображения текста после футера каждой страницы

Этот пример плагина вызывает хук действия wp_footer() перед закрывающим тегом </body> каждой страницы и добавляет новую функцию mfp_Add_Text(). Поскольку эта функция является частью плагина, она будет работать даже после смены темы.

Сохраните этот пример как PHP-файл и загрузите его в папку plugins, которая находится внутри папки wp-content.

<?php
/*
Plugin Name: Add Text To Footer
*/
// Цепляем хук действия 'wp_footer', добавляем в него функцию с именем 'mfp_Add_Text'

add_action("wp_footer", "mfp_Add_Text");
 
// Определяем функцию 'mfp_Add_Text'

function mfp_Add_Text()
{
  echo "<p style='color: black;'>After the footer is loaded, my text is added!</p>";
}

На скриншоте ниже видим, что после активации плагина через панель администратора WordPress выводит на сайте следующее:

Фраза из функции вывелась на сайт ниже футера
Важно! PHP оценивает весь скрипт перед его выполнением. Запись вызовов add_action() в верхней части файла в порядке их выполнения, а затем определение ваших функций в том же порядке ниже, сделает файл более легким для чтения.

Удаление функций из хука действия с помощью remove_action()

Чтобы удалить действие из хука действия, напишите новую функцию remove_action(), а затем вызовите написанную функцию с помощью add_action().

Функция remove_action() также должна содержать как минимум 2 параметра.

// В действие 'init', которое вызывается после завершения загрузки кода ядра WordPress, добавьте функцию 'remove_My_Meta_Tags'.

add_action( 'init', 'remove_My_Meta_Tags' );

// Удалите функцию 'add_My_Meta_Tags' из хука действия wp_head

function remove_My_Meta_Tags()
{
  remove_action( 'wp_head', 'add_My_Meta_Tags');
}

Первый параметр – это имя хука действия, к которому привязана функция, а второй параметр содержит имя функции, которую вы хотите удалить.

Третий необязательный параметр указывает приоритет исходной функции. Он должен быть идентичен приоритету, который был изначально определен при добавлении действия к хуку действия. Если вы не определили приоритет в пользовательской функции, не указывайте этот параметр.

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

Один из способов сделать это – использовать функцию PHP date() для получения текущего дня, а затем условные теги для проверки того, что сегодня понедельник. После анализа информации страница будет выполнять функцию remove_action() в каждой статье, опубликованной в понедельник.

<?php
// Подцепите действие 'wp_footer', запустите функцию с именем 'mfp_Add_Text()'.

add_action("wp_footer", "mfp_Add_Text");

// Подцепите действие 'wp_head', запустите функцию с именем 'mfp_Remove_Text()'.

add_action("wp_head", "mfp_Remove_Text");

// Определяем функцию с именем 'mfp_Add_Text('), которая просто выводит простой текст методом echo

function mfp_Add_Text()
{
  echo "<p style='color: #FFF;'>After the footer is loaded, my text is added!</p>";
}

// Определяем функцию с именем 'mfp_Remove_Text()', чтобы удалить нашу предыдущую функцию из действия 'wp_footer'

function mfp_Remove_Text()
{
  if (date("l") === "Monday") {

    // удаляем из 'wp_footer' функцию 'mfp_Add_Text' с учетом условия if выше

    remove_action("wp_footer", "mfp_Add_Text");
  }
}

Обратите внимание, что в коде плагина мы сначала определили все add_action по порядку, а уже после них определили все функции также по порядку согласно add_action.

Фильтры и хуки фильтров

Фильтер (filter) – это функция PHP, вызываемая определенным хуком filter, которая изменяет данные, возвращаемые существующими функциями. Как и хуки действий, хуки фильтров также зависят от контекста.

Полный список хуков фильтров и контекстов, в которых они вызываются, доступен на странице Справочник фильтров плагинов WordPress.

Добавление фильтров с помощью функции add_filter()

Добавление функции фильтра к хуку фильтра в файле плагина требует вызова функции add_filter() как минимум с 2 параметрами.

// Подцепите хук фильтра 'the_content' (содержимое любой статьи), запустите функцию с именем 'mfp_Fix_Text_Spacing'.

add_filter("the_content", "mfp_Fix_Text_Spacing");

// Автоматическое исправление двойных пробелов в любой записи

function mfp_Fix_Text_Spacing($the_Post)
{
 $the_New_Post = str_replace("  ", " ", $the_Post);
 return $the_New_Post;
}

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

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

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

Пример плагина для изменения отрывка поста

В WordPress есть функция для получения отрывков постов, которая называется get_the_excerpt(). Это также хук фильтра. Добавление этого фильтра после получения отрывка изменит текст до того, как он будет отображен на сайте WordPress.

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

Поскольку возвращаемым значением функции get_the_excerpt() является фактический текст отрывка, плагин будет автоматически вводить новое значение в качестве параметра функции $old_Excerpt при вызове с помощью add_filter(). Функция, определяемая плагином, должна возвращать новое значение.

<?php
/*
Plugin Name: Add Excerpt 
*/
// Подцепите хук фильтра get_the_excerpt, запустите функцию mfp_Add_Text_To_Excerpt

add_filter("get_the_excerpt", "mfp_Add_Text_To_Excerpt");

// Берем отрывок, добавляем перед ним текст и возвращаем новый отрывок

function mfp_Add_Text_To_Excerpt($old_Excerpt)
{
  $new_Excerpt = "<b>Excerpt: </b>" . $old_Excerpt;
  return $new_Excerpt;
}

Удаление фильтров с помощью remove_filter()

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

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

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

// Перехватите хук фильтра get_the_excerpt, запустите функцию с именем mfp_Add_Text_To_Excerpt.

add_filter("get_the_excerpt", "mfp_Add_Text_To_Excerpt");

// Если сегодня четверг, удалите фильтр из the_excerpt()

if (date("l") === "Thursday") {
  remove_filter("get_the_excerpt", "mfp_Add_Text_To_Excerpt");
}

// Возьмите отрывок, добавьте перед ним текст и верните новый отрывок

function mfp_Add_Text_To_Excerpt($old_Excerpt)
{
  $new_Excerpt = "<b>Excerpt: </b>" . $old_Excerpt;
  return $new_Excerpt;
}

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

Важно! Использование тестового сайта WordPress для тестирования новых плагинов поможет вам избежать ошибок, которые могут привести к простою. Существует два способа создания среды тестирования – вручную или с помощью плагина, например, WP Staging. В качестве альтернативы установите WordPress локально на свой компьютер.

Шаг 1. Расположение плагина

Первым шагом при создании нового плагина является создание папки для его файлов. Имя папки должно быть уникальным и информативным. Проверьте имена других папок плагинов в каталоге /wp-content/plugins/, чтобы убедиться, что новое имя еще не используется.

Для облегчения процесса загрузки файлов используйте FTP-клиент для подключения к аккаунту хостинга. Перейдите в wp-content -> plugins из основной директории WordPress. Затем создайте новую папку с именем my-first-plugin в папке plugins.

Практика управления файлами во время разработки WordPress значительно облегчит процесс в долгосрочной перспективе. Разделите файлы на подпапки в зависимости от их функциональности.

Например, сохраняйте файлы CSS, PHP и JavaScript в отдельных папках. По мере разработки плагина WordPress вам будет легче находить конкретные файлы, если у каждого из них будет своя директория.

Шаг 2. Создание первого файла

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

Создайте новый PHP-файл под названием my-first-plugin.php в папке, которую вы создали ранее. Этот основной файл плагина будет содержать комментарии заголовка с дополнительной информацией, которую WordPress должен прочитать или отобразить.

Затем щелкните на файле правой кнопкой мыши и выберите View/Edit, чтобы добавить следующий код с помощью HTML-редактора:

<?php
/*
Plugin Name: Мой первый плагин
Description: Это мой первый плагин! Он делает новую ссылку в меню админки!
Author: Ваше имя
*/

Вы можете посмотреть это руководство PHP, чтобы понять, почему закрывающий тег ?> здесь не нужен.

Сохраните файл.

Затем перейдите в раздел Plugins вашей административной панели управления WordPress. Если WordPress правильно прочитал новый файл, вы увидите в списке My First Plugin:

Шаг 3. Написание функций плагина

Прежде чем приступить к написанию функций для плагина, настоятельно рекомендуется дать всем файлам, функциям и переменным уникальный префикс в их названии, чтобы избежать конфликтов с другими плагинами. В нашем примере мы будем использовать префикс mfp, что является сокращением от My First Plugin.

Создайте новую папку Includes в основном каталоге плагина. Мы будем использовать ее для хранения вспомогательных файлов, используемых основным файлом. В этой папке создайте PHP-файл и назовите его mfp-functions.php. Дайте ему открывающий тег <?php в первой строке.

Этот новый файл будет содержать все функции вашего плагина.

Мы должны включить mfp-functions.php в основной файл плагина, чтобы другие файлы плагина могли использовать функции, которые он определяет. Используйте require_once, чтобы плагин работал только при наличии файла функций.

Отредактируйте файл my-first-plugin.php, как показано ниже. Затем сохраните его и загрузите файл еще раз, перезаписав предыдущую версию при необходимости.

<?php
/*
Plugin Name: My First Plugin
Description: This is my first plugin! It makes a new admin menu link!
Author: Your Name
*/
// Подключаем mfp-functions.php, используем require_once для остановки скрипта, если mfp-functions.php не найден

require_once plugin_dir_path(__FILE__) . 'includes/mfp-functions.php';

Функция WordPress plugin_dir_path(__FILE) позволяет включать файлы из папки плагина, указывая полный путь к директории, в которой хранится новый плагин.

Теперь вернитесь к файлу mfp-functions.php в директории Includes. Поскольку наш плагин будет добавлять новую ссылку верхнего уровня в навигационное меню панели управления администратора, мы будем использовать пользовательскую функцию mfp_Add_My_Admin_Link(). Добавьте приведенный ниже блок кода в файл mfp-functions.php:

<?php
/*
 * Добавляем мое новое меню в панель управления администратора
 */
// Перехватите хук действия 'admin_menu', запустите функцию с именем 'mfp_Add_My_Admin_Link()'

add_action( 'admin_menu', 'mfp_Add_My_Admin_Link' );

// Добавить новую ссылку меню верхнего уровня в админ панели

function mfp_Add_My_Admin_Link()
{
      add_menu_page(
        'My First Page', // Заголовок страницы
        'My First Plugin', // Текст для отображения в ссылке меню
        'manage_options', // Требования к возможностям для просмотра ссылки
        'includes/mfp-first-acp-page.php' // 'slug' - файл для отображения при переходе по ссылке
    );
}
Важно! Группируйте похожие функции вместе и добавляйте описание над каждой из них с помощью многострочного комментария. Это облегчит обновление и отладку плагина в будущем.

mfp_Add_My_Admin_Link() использует встроенную функцию WordPress add_menu_page() с минимум четырьмя параметрами в следующем порядке:

  • Page title – заголовок страницы – название страницы, отображаемое на вкладке браузера
  • Menu title – заголовок меню – текст, используемый для пункта меню, в нашем примере это название плагина
  • Capability – возможности – требования к возможностям пользователя для просмотра меню плагина, в данном случае только пользователи с правами manage_options могут получить доступ к привязанной странице
  • Menu slug – файл, который будет использоваться для отображения фактической страницы, мы создадим файл mfp-first-acp-page.php в папке Includes в следующем разделе
  • Function – Функция (необязательная) – функция, которая выводит содержимое страницы

Прикрепление пользовательской функции с помощью add_action() позволяет плагину вызывать хук действия при определенных обстоятельствах. Добавление admin_menu в качестве первого параметра вызовет функцию, когда пользователь зайдет в меню администратора. Между тем, mfp_Add_My_Admin_Link – это функция, которая будет запущена, когда она будет указана в качестве второго параметра.

Наконец, загрузите файл плагина mfp-functions.php в папку Includes.

Шаг 4. Создание административной страницы плагина

После определения функций плагина пришло время создать страницу, на которую будет перенаправлять кнопка меню. Создайте новый PHP-файл с именем mfp-first-acp-page.php в подпапке Includes и добавьте в него следующий код:

<div class="wrap">
  <h1>Привет!</h1>
  <p>Это первая страница моего плагина</p>
</div>

При создании страниц администратора WordPress рекомендует заключать собственный HTML в тег

и присваивать ему класс wrap, чтобы гарантировать, что все содержимое появится в нужном месте. Это также помогает уменьшить беспорядок в коде.

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

Поздравляем – вы успешно создали свой первый плагин WordPress.

Если вы создали плагин на тестовом сайте, вам нужно будет установить его на реальном сайте. Следующие шаги продемонстрируют как это сделать.

1. В FileZilla щелкните правой кнопкой мыши на папке my-new-plugin и выберите Download. Затем сожмите файлы в ZIP-архив.

2. Перейдите в меню Plugins (Плагины) на панели управления WordPress. Затем нажмите кнопку Add New (Добавить новый).

3. Нажмите Upload Plugin (Загрузить плагин) и выберите ZIP-файл вашего плагина.

4. Выберите Install Now (Установить сейчас), чтобы начать процесс установки.

Стандарты при создании плагинов

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

Учитывая это, с самого начала следуйте лучшим практикам разработки плагинов. Это облегчит весь процесс для вас и всех веб-разработчиков, с которыми вы будете работать в будущем.

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

Вот некоторые из лучших практик кодинга и разработки плагинов, которые помогут в создании вашего первого плагина WordPress:

  • Разрабатывайте и тестируйте плагины WP в тестовой среде. Таким образом, не будет риска поломать сайт, если плагин имеет некорректный код.
  • Создайте логичную структуру папок. Создайте подпапки для каждой функциональности и разделите код на отдельные файлы в зависимости от их назначения или типа языка, чтобы избежать беспорядка.
  • Называйте каждый файл, папку и элемент с осторожностью. Используйте уникальные префиксы, чтобы они не пересекались с именами файлов других плагинов или ядра WordPress.
  • Добавляйте комментарии для обозначения каждой функции. Это позволит вам и другим разработчикам понять ваш код при его обновлении или отладке.
  • Создавайте документацию. Эта практика особенно полезна, если вы создаете плагины со сложной функциональностью для большого числа пользователей.
  • Используйте программное обеспечение для контроля версий, чтобы отслеживать изменения, внесенные в ваш код. Знание того, кто что добавил, поможет предотвратить конфликты между обновлениями и уменьшить количество ошибок.
  • Обратитесь к WordPress Codex, чтобы узнать стандарты кодинга. Обязательно соблюдайте их при совместной работе над проектом.
  • Активируйте WP_DEBUG или используйте инструмент отладки при разработке плагинов. Это облегчит поиск ошибок и ускорит процесс создания плагина в целом.

Заключение

Разработка собственного плагина – это способ добавить на сайт WordPress функциональность, которой нет в имеющихся плагинах. Это может быть простой плагин, вносящий незначительные изменения, или сложный, изменяющий весь сайт.

Вкратце, вот шаги по созданию плагина WordPress с нуля:

  1. Создайте папку для хранения файлов плагина.
  2. Создайте главный файл для вашего плагина.
  3. Добавьте код в несколько файлов для функций плагина.
  4. Создайте страницу администрирования плагина.

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

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

Published 28 May 2022
Category: Блог
Tags:

Leave a Reply

Your email address will not be published.