• доступно о веб-разработке
23.12.2014 PHP, Wordpress, Движки, Плагины, Уроки

Разработка плагина для WordPress #2

wp-plug-dev

Продолжаем начатую тему и переходим к самому интересному — внутреннему устройству плагина.

Главным теоретическим подспорьем при создании плагина является WordPress Codex, в особенности его раздел Plugins API.

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

Для того, чтобы WordPress увидел ваш плагин необходим только один файл.

Он может располагаться либо в корне папке плагинов (по умолчанию /wp-content/plugins/), либо в подпапке (рекомендуется, если плагин состоит из более чем одного файла).

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

В нашем случае решено было назвать плагин Easy Prism Syntax Highlighter.

Для наименования папки и основного файла плагина лучше использовать название, переведённое в нижний регистр, в котором пробелы заменены тире. Пробелы нежелательны, т.к. браузер их будет превращать в символы «%20», что иногда может мешать корректной работе плагина.

Вы можете использовать Yeoman для автоматической генерации скелета плагина.

Итак, создаём в папке с плагинами подпапку easy-prism-syntax-highlighter, а внутри неё файл easy-prism-syntax-highlighter.php.

Теперь в главном файле  easy-prism-syntax-highlighter.php нам необходимо обозначить мета-информацию, благодаря которой WordPress сможет увидеть плагин.

Как понять, какие данные необходимо указывать?

Здесь нам поможет следующая страница:

http://codex.wordpress.org/Написание_плагина

 

<?php
/*
Plugin Name: Название плагина
Plugin URI: http://страница_с_описанием_плагина_и_его_обновлений
Description: Краткое описание плагина.
Version: Номер версии плагина, например: 1.0
Author: Имя автора плагина
Author URI: http://страница_автора_плагина
*/

Пишем свой код, добавляя в него некоторые коды для документации на PHP:

<?php
/**
* Easy Prism Syntax Highlither
*
* Highlight programming code with Prism.JS script.
*
* @package easy-prism-syntax-highlighter
* @author Dmitriy Belyaev <admin@codemotion.ru>
* @license GPL-2.0+
* @link http://codemotion.ru
* @copyright 12-17-2014 codemotion
*
* @wordpress-plugin
* Plugin Name: Easy Prism Syntax Highlighter
* Plugin URI: http://codemotion.ru
* Description: Tired to search for normal, easy to install programming code highlight plugin? This one will help you to end this adventure.
* Version: 1.0.2
* Author: Dmitriy Belyaev
* Author URI: http://codemotion.ru
* Text Domain: easy-prism-locale
* License: GPL-2.0+
* License URI: http://www.gnu.org/licenses/gpl-2.0.txt
* Domain Path: /lang
*/

Великолепно. Теперь WordPress видит наш плагин.

Далее в том же  easy-prism-syntax-highlighter.php мы допишем следующие строки:

// Для того, чтобы этот файл не могли подключить вне WordPress
if (!defined("WPINC")) {
die;
}

// Подключаем класс плагина

require_once(plugin_dir_path(__FILE__) . "PrismSyntaxHighlither.php");

// Получаем сущность плагина, паттерн Singleton

PrismSyntaxHighlither::get_instance();

 

Разработка логики

В корне папки плагина создаём указанный выше подключаемый файл PrismSyntaxHighlither.php внутри которого будет содержаться класс плагина.

По факту плагин сгенерирован при помощи Yeoman, поэтому все комментарии в коде класса на английском.

<?php

/**
* Prism Syntax Highlither
*
* @package easy-prism-syntax-highlighter
* @author Dmitriy Belyaev <admin@codemotion.ru>
* @license GPL-2.0+
* @link http://codemotion.ru
* @copyright 12-17-2014 codemotion
*/

/**
* Prism Syntax Highlither class.
*
* @package PrismSyntaxHighlither
* @author Dmitriy Belyaev <admin@codemotion.ru>
*/
class PrismSyntaxHighlither{
/**
* Plugin version, used for cache-busting of style and script file references.
*
* @since 1.0.0
*
* @var string
*/
protected $version = "1.0.2";

/**
* Unique identifier for your plugin.
*
* Use this value (not the variable name) as the text domain when internationalizing strings of text. It should
* match the Text Domain file header in the main plugin file.
*
* @since 1.0.0
*
* @var string
*/
protected $plugin_slug = "easy-prism-syntax-highlighter";

/**
* Instance of this class.
*
* @since 1.0.0
*
* @var object
*/
protected static $instance = null;

/**
* Slug of the plugin screen.
*
* @since 1.0.0
*
* @var string
*/
protected $plugin_screen_hook_suffix = null;

 

Свойства класса достаточно ясны:

  • $version — версия плагина. Если он совсем сырой, можно начинать с 0.1. В данном случае уже было два коммита по исправлению багов, поэтому версия 1.0.2.
  • $plugin_slug — в нашем случае тождественно равен названию папки с плагином.
  • $instance — переменная, в которой содержится сущность класса, согласно паттерну Singleton. Объект класса может быть создан только единожды, размещается в этой переменной и вызывается при помощи статического метода PrismSyntaxHighlither::get_instance().
  • $plugin_screen_hook_suffix – это названия экрана с настройками в панели управления. Генерируется в процессе работы с админкой.

Основной метод работы плагина — это его внедрение в различные участки рабочего процесса.

Осуществляется оно при помощи двух сущностей, которые носят название хуков, действий и фильтров.

Хуки, действия и фильтры

В различных местах кода WordPress разбросаны действия. Когда совершается какой-либо процесс, рядом внедрён код следующего вида:

do_action('action_name'[,$arg1[,…,$argN]]);

Это и есть вызов действия, которое имеет своё имя (условное action_name) и аргументы. Аргументов может и не быть вовсе.

Мы можем из нашего плагина «прицепиться» к этому действию. «Хук» — в переводе с англ. hook означает «крючок».

В WordPress хуком называется процесс прикрепления нашего кода к определённому месту, который характеризуется названием действия.

Например, чтобы было понятно, в данном случае action_name – это и есть хук.

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

Выглядит наша зацепка следующим образом:

add_action('action_name',$callback);

// $callback может быть просто названием функции, если вы не используете ООП.

// Например, 'myplugin_some_func'

add_action('action_name','myplugin_some_func');

// $callback может быть сложным, ссылаясь на метод объекта класса

add_action('action_name',array($this,"some_func'));

// $callback может также ссылаться на статический метод класса

add_action('action_name','MyPlugin::some_static_func');

Пример, повесили на некое действие свою функцию:

class emailer {
static function send($post_ID) {
$friends = 'bob@example.org,susie@example.org';
mail($friends,"sally's blog updated",'I just put something on my blog: http://blog.example.com');
return $post_ID;
}
}

add_action('publish_post', array('emailer', 'send'));

Вот ссылки функции, связанные с действиями (полезно читать документацию WordPress):

Фильтры — это более узко специализированные действия. В основном они служат для обработки контента.

Не буду останавливаться подробнее, обо всём написано в документации.

Изучите функции фильтров:

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

Даю ссылку на крайне полезный ресурс, где собраны все хуки:

http://adambrown.info/p/wp_hooks/version/3.9

Несмотря на то, что недавно вышла версия WordPress 4.1, все эти хуки актуальны (разве что пару новых было добавлено).

Изучению методов класса плагина будет посвящён следующий материал.

Поделиться

Комментарии Правила дискуссии

Читайте ранее:
Yeoman – генератор программного кода

Есть такие программы и утилиты, воспользовавшись которыми, пользователь возопит: «Не знаю, как я мог жить без этого инструмента раньше!». На...

Закрыть