Создание плагина
Рассмотрим пример создания очень простого плагина, который позволяет вставлять в запись ссылку на внешний сайт.
Прежде чем создавать плагин стоит проверить, может быть подобный плагин уже существует. Если необходимая функциональность еще не реализована в доступных плагинах, можно создать новый плагин.
1. Выбор имени плагина
Имя плагина должно быть уникальным, поэтому следует попробовать найти плагин с выбранным именем и в Интернет (например, в поисковой системе google).
WordPress ищет плагины в папке /wp-content/plugins, поэтому для того, чтобы установить плагин, его нужно поместить в эту папку. Потом его можно будет активировать на панели администрирования.
2. Создание папки плагина и его php-файла с выбранным (уникальным) именем: myref и myref.php. (Если плагин будет состоять из одного php-файла, для него можно не создавать отдельную папку)
В начале php-файла плагина должно находиться его описание и лицензия:
<?php
/*
Plugin Name: myref
Plugin URI: http://mblogm.ru
Description: Inserts site's url
Version: 1.0.0
Author: fmblogm
Author URI: http://mblogm.ru
Copyright 2009 fmblogm (email : fmblogm {at} gmail.com)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
?>
Формально этого уже достаточно для создания плагина. Хотя этот плагин ничего не делает, он появится в списке плагинов, и его можно активировать.
Плагин может просто содержать функции, которые нужно вызывать в шаблоне, а также может реагировать на заданные события (при загрузке плагин сообщает WordPress, на какие события он будет реагировать, и как их обрабатывать.). Более сложные плагины управляются через панель администрирования.
Хуки (hooks)
Хуки обеспечивают привязку плагина к WordPress.
- Действия (Actions) – это хуки, которые WordPress запускает в определенные моменты исполнения или при наступлении определенных событий. В эти моменты в плагине можно задать вызов некоторых PHP-функций с использованием Action API.
- Фильтры (Filters) - это хуки, которые WordPress запускает для того, чтобы изменять значения разных типов перед добавлением их в базу данных или перед отображением в браузере. В эти моменты в плагине можно задать вызов некоторых PHP-функций с использованием Filter API.
- Сокращенный код (Shortcodes) - это хуки, позволяющие добавлять в записи WordPress результат выполнения PHP-функций с использованием Shortcode API (начиная с WordPress 2.5) .
Сокращенный код (Shortcodes)
Поддерживаются шоткоды вида
[shortcode_name attr_1="value_1" ... attr_n="value_n"]
и
[shortcode_name attr_1="value_1" ... attr_n="value_n"]content[/shortcode_name]
Функция-обработчик сокращенного кода может принимать следующие параметры
- $atts – массив атрибутов
- $content – содержимое (когда используется форма с закрывающим тегом)
- $code - имя шоткода (когда оно соответствует имени обратного вызова )
function my_shortcode_handler($atts, $content=null, $code="") {
// $atts ::= array of attributes
// $content ::= text within enclosing form of shortcode element
// $code ::= the shortcode found, when == callback name
// examples: [my-shortcode]
// [my-shortcode/]
// [my-shortcode foo='bar']
// [my-shortcode foo='bar'/]
// [my-shortcode]content[/my-shortcode]
// [my-shortcode foo='bar']content[/my-shortcode]
}
Регистрация обработчика:
add_shortcode('my-shortcode', 'my_shortcode_handler');
Например, сокращенный код [ref] с поддержкой двух атрибутов text и url. Оба атрибута являются необязательными, и когда они не заданы, применяются их дефолтные значения:
// [ref text="Текст ссылки" url="url ссылки"]
function ref_func($atts) {
extract(shortcode_atts(array(
'text' => 'Study English Now',
'url' => 'http://studyenglishnow.ru/'
), $atts));
return '<noindex><a href="'. $url .'" rel="nofollow">'.$text.'</a></noindex>';
}
add_shortcode('ref', 'ref_func');
Когда вызывается тег шаблона the_content (и отображается содержимое записи), shortcode API анализирует зарегистрированные шоткоды, выделяет их атрибуты и содержимое и передает их обработчику данного шоткода. В тело записи вместо тега (тегов) шоткода добавляется строка, возвращаемая обработчиком.
Еще один пример
Следующий плагин [enti] с атрибутом text вставляет HTML-сущности заданных символов (по умолчанию плагин вставляет “]”; он используется вместо простой квадратной скобки, чтобы показывать на странице текст вызова плагина, например, “[ref]“, а не результат работы этого плагина):
function enti_func($atts) {
extract(shortcode_atts(array(
'text' => ']'
), $atts));
return htmlentities($text);
}
add_shortcode('enti', 'enti_func');
Этот плагин просто позволяет использовать в записи php-функцию htmlentities().
Шоткод [enti text="&"] выведет & (&).