В первой части серии публикаций на тему создания собственного 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 |
опечатка
настройки плагина будут уничтожеЫН вызовом myplug_unset_options
Некоторые блоггеры специально делают опечатки с целью повысить “уникальность” текста в глазах поисковых систем, так что не буду отказывать в праве на существование этой описке, раз уж она пролезла через проверку орфографии 🙂
Ну это уже кое-что, дорогой аффтар 🙂 Но всё же очень мало информации и много лишних слов. Старайтесь писать уже, без лишней болтовни, но чтобы читать было интересно 🙂
Не хватает ссылок по типу “следующая статья”. Приходится возвращаться к оглавлению. не оч удобно..
Спасибо, прикрутил навигацию по частям цикла.
Начинаю писать плагин, собственно весь “плагин” выглядит так:
При попытке его активировать появляются предупреждения (и некоторые функции блога отваливаются):
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
ГДЕ мне удалось вывести что-то на экран в ТАКОМ коде?
/*
Plugin Name: MC_CC
Plugin URI: [ссылка]
Description: This plugin .
Author: An
Author URI: [ссылка]
Version: 0.3
*/
в окружении тегов php
По аналогии с: [ссылка], но применительно к Вашему плагину стоит проверить для начала.
Спасибо! Оказалось, что и правда, созданный в блокноте файл в кодировке утф-8 подписывал какую-то фигню в начале файла. Notepad++ и кодировка без ВОМ помогли.