Напишем плагин для WordPress. Часть 2. Общая теория.

wordpress-plugin-2

В первой части серии публикаций на тему создания собственного wordpress плагина я постарался ответить на вопросы "Зачем и как написать плагин для WordPress?". Теперь же пора приступить к практической реализации замысла по созданию плагина. В качестве примера я рассморю плагин, который будет создавать модифицировать заголовок и тело записи на этапе её публикации (т.е. в тот момент, когда пользователь нажимает кнопку "Опубликовать" или "Обновить"). По-моему такой подход интересен в первую очередь тем, что позволит в будущем на основе плагина примера написать более серьёзный плагин для WordPress, например — автоматически изменяющий контент.

Приступим.

Механизм работы плагинов WordPress.

Рассмотрим для начала в общих чертах механизм работы любого wordpress плагина, чтобы свой плагин писать осмысленно.

Перехват событий (хуки)

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

Для перехвата событий можно использовать два метода:

  • add_action (переопределит базовую функцию wordpress на пользовательскую)
  • add_filter (сработает при вызове базовой функции, вызвав для выполнения пользовательскую функцию)

Соответственно, возможны и обратные действия — remove_action и remove_filter.

В плагине-примере я буду использовать метод add_filter, т.к. мне необходимо лишь изменить данные, поступющие для публикации, сам же механизм публикации я трогать не хочу (и не нуждаюсь в этом).

Обработка событий (функции)

Для обработки перехваченных событий применяются функции (они же — процедуры). В процессе написания плагина для WordPress мы ещё не раз с ними столкнёмся. В php для определения функции используется служебное слово function.

Начало работы над плагином

Описание плагина

Минимально необходимая нефункциональная часть плагина — это краткие сведения о нём, добавляемые в начало файла плагина. Выглядит следующим образом (справедливости ради должен отметить, что действительно необходимо указывать только название плагина, но лучше заполнить побольше информации, тем более, что это пригодится в будущем):

/*
Plugin Name: My New Plagin
Plugin URI: https://dimio.org/my_plugin
Description: Мой плагин для WordPress. 
Version: 0.1
Author: dimio
Author URI: https://dimio.org
*/

Эту секцию необходимо вставить в начало файла плагина, после отрывающегося тега php ( <?php ).

Установка и удаление wordpress плагина

При написании плагина для WordPress нужно помнить и о правилах хорошего тона, а именно — использовать инструменты установки и удаления плагина. Некоторые функции (такие, как создание таблицы с данными для работы плагина, добавление новых опций, используемых плагином, в соответствующую таблицу БД wordpress) нужно выполнять только один раз — при установке плагина. Ну а при его удалении необходимо прибрать за собой — удалить установленные опции и созданные таблицы. Для этих целей в wordpress служат перехватчики

register_activation_hook(__FILE__, ‘myplug_set_options’);
register_deactivation_hook(__FILE__, ‘myplug_unset_options’);

Поясню: при установке плагина будет вызвана функция myplug_set_options, в которой мы опишем процесс создания необходимых настроек, ну а при удалении все настройки плагина будут уничтожеын вызовом myplug_unset_options. Безусловно, имена вызываемых функций могут быть любыми. Приведённые выше две строки нужно поместить после описания плагина, то есть код в целом будет выглядеть следующим образом:


<?php
/*
Plugin Name: My New Plugin
Plugin URI: https://dimio.org/myplugin
Description: Мой плагин
Version: 0.1
Author: dimio
Author URI: https://dimio.org
*/
register_activation_hook(__FILE__, 'myplugin_set_options');
register_deactivation_hook(__FILE__, 'myplugin_unset_options');
?>

Написать плагин для WordPress действительно просто!

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

Другие заметки по созданию плагина для WordPress

<-- Часть 1. Введение, общая информация по WordPress-плагинам
Часть 3. Подготовка к созданию страницы настроек плагина —>
Общее оглавление к циклу заметок по созданию плагина для WordPress

10 мыслей о “Напишем плагин для WordPress. Часть 2. Общая теория.”

    1. Некоторые блоггеры специально делают опечатки с целью повысить «уникальность» текста в глазах поисковых систем, так что не буду отказывать в праве на существование этой описке, раз уж она пролезла через проверку орфографии 🙂

  1. Ну это уже кое-что, дорогой аффтар 🙂 Но всё же очень мало информации и много лишних слов. Старайтесь писать уже, без лишней болтовни, но чтобы читать было интересно 🙂

  2. Не хватает ссылок по типу «следующая статья». Приходится возвращаться к оглавлению. не оч удобно..

  3. Начинаю писать плагин, собственно весь «плагин» выглядит так:

    При попытке его активировать появляются предупреждения (и некоторые функции блога отваливаются):

    Warning: Cannot modify header information — headers already sent by (output started at Z:\home\localhost\www\——\wp-content\plugins\k_pm\mc.php:1) in Z:\home\localhost\www\——\wp-includes\option.php on line 787

    ГДЕ мне удалось вывести что-то на экран в ТАКОМ коде?

        1. Спасибо! Оказалось, что и правда, созданный в блокноте файл в кодировке утф-8 подписывал какую-то фигню в начале файла. Notepad++ и кодировка без ВОМ помогли.

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

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