Создание плагина: шоткоды

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

Выбор имени плагина

Имя плагина должно быть уникальным, поэтому следует попробовать найти плагин с выбранным именем на сайте WordPress и в Интернет (например, в поисковой системе google).
WordPress ищет плагины в папке /wp-content/plugins, поэтому для того, чтобы установить плагин, его нужно поместить в эту папку. Потом его можно будет активировать на панели администрирования.

Создание папки и файлов плагина

Создание папки плагина и его 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');

Например, сокращенный код Study English Now с поддержкой двух атрибутов text и 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-сущности заданных символов (по умолчанию плагин вставляет [ - открывающую квадратную скобку). Его можно использовать вместо простой квадратной скобки, чтобы показывать на странице текст вызова плагина, например, Study English Now, а не результат работы плагина ):

function enti_func($atts) {
extract(shortcode_atts(array)(
   'text' => '['
  ), $atts));
  return htmlentities($text);
}
add_shortcode('enti', 'enti_func');

Этот плагин просто позволяет использовать в записи php-функцию htmlentities().
Шоткод [enti]enti] (по умолчанию) выведет [enti], а [enti]enti text="&"] выведет [enti text="&"].

Содержимое только для зарегистрированных посетителей

Следующий плагин позволяет помещать на страницы и в записи блога содержимое, которое увидят только зарегистрированные посетители после входа в систему.
Поскольку содержимого может быть довольно много, удобнее использовать форму вызова плагина с закрывающим тегом [formember]... [/formember]

<?php
/*
Plugin Name: formember
...
*/
// [formember] отображаемое содержимое [/formember]
function member_check($atts, $content = null) {
 if (is_user_logged_in() && !is_null($content) && !is_feed()) {
  return $content; // отображаемое содержимое
 } else {
  return 'Только для зарегистрированных посетителей';
 }
}
add_shortcode('formember', 'member_check');
?>

CSS-стили и JavaScript

Если плагин используется не на всех, а на одной или нескольких страницах сайта, желательно загружать файлы стилей и JavaScript плагина только на эти страницы.
В WordPress 3.3 появилась возможность загружать на сайт стили и скрипты js только на страницы сайта с добавленным шоткодом, т.к. код подключения можно вызвать внутри функции-обработчика шоткода. Как это сделать? - См. Загрузка JS-скриптов и CSS-стилей только на странице с шоткодом.

Опубликовано в рубрике Создание плагина | с метками , , , . |

Еще записи

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

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