Рассмотрим примеры создания плагинов с шорткодами (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://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) вида
[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 тоже пойдет