Рассмотрим примеры создания плагинов с шорткодами (shortcode).
Сначала создадим очень простой плагин, который позволяет вставлять в запись ссылку на внешний сайт.
Прежде чем создавать плагин стоит проверить, может быть подобный плагин уже существует. Если необходимая функциональность еще не реализована в доступных плагинах, можно создать новый плагин.
Выбор имени плагина
Имя плагина должно быть уникальным, поэтому следует попробовать найти плагин с выбранным именем [ref text="на сайте WordPress" url=" http://wordpress.org/extend/plugins/"] и в Интернет (например, в поисковой системе google).
WordPress ищет плагины в папке /wp-content/plugins, поэтому для того, чтобы установить плагин, его нужно поместить в эту папку. Потом его можно будет активировать на панели администрирования.
Создание папки и файлов плагина
Создание папки плагина и его php-файла с выбранным (уникальным) именем: myref и myref.php. (Если плагин будет состоять из одного php-файла, для него можно не создавать отдельную папку)
В начале php-файла плагина должно находиться его описание и лицензия:
<?php
/*
Plugin Name: myref
Plugin URI: http://wordpress.howtoo.ru
Description: Inserts site's url
Version: 1.0.0
Author: fwordpress.howtoo
Author URI: http://wordpress.howtoo.ru
Copyright 2009 fwordpress.howtoo (email : fwordpress.howtoo {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) вида
[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. Оба атрибута являются необязательными, и когда они не заданы, применяются их дефолтные значения:
<?php
/*
Plugin Name: formember
...
*/
function ref_func($atts) { // [ref text="Текст ссылки" url="url ссылки"]
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]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-стилей только на странице с шорткодом.
Как добавить плагин в виджеты?
В WordPress 4.9 шорткоды по умолчанию работают в текстовом виджете (HTML-код) .
Мне очень понравилась статья. Жаль что не нашел описания на 5.2 но и 4.9 тоже пойдет