Как найти шорткод в wordpress

Шорткод (шоткод, shortcode, короткий код) в WordPress — это конструкция в тексте, которая будет обработана и заменена на указанный код/текст. Обрабатывается шорткод специальной PHP функцией, указанной при регистрации шорткода.

Shortcode API — это набор простых функций, которые позволяют разработчикам тем и плагинов создавать свои шорткоды, которые затем можно использовать в контенте для вывода готовых блоков контента. Например, это может быть форма контактов.

Для примера, следующий Шорткод (в контенте записи) добавит фотогалерею:


В контенте обрабатываются только известные (зарегистрированные в WordPress) шорткоды, потому что нельзя обрабатывать все конструкции вида [*], так как они могут быть использованы в тексте или HTML. Поэтому:

  • — будет преобразовано, потому что шорткод зарегистрирован

  • [no_name] — не будет преобразовано, потому что шорткод не зарегистрирован
Шорткоды могут вызываться по-разному:  
[name] «self-closing» Одиночный шорткод без параметров.
[name id=»123″ size=»medium»] «self-closing» Одиночный с параметрами.
[name]текст[/name] «enclosing» Контентный шорткод без параметров. Получает текст в качестве параметра.
[name size=»medium»]текст[/name] «enclosing» Контентный шорткод с параметрами.

Видео о шорткодах в WordPress:

Список шорткодов WordPress

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

  • или

Синтаксис шорткода

Шорткоды WordPress используют Квадратные скобки [], потому что они не являются частью какого-либо языка. Синтаксис выглядит так:

[name]

[name /]

[name attribute="value" /]

[name attr1='value1' attr2="value2" ]

[name]Контент шорткода.[/name]

[name attr="value"]Контент шорткода.[/name]

Само-закрытие (self-closing)

Шорткод можно закрыть слэшем в конце (такой слэш называется self-closing маркером).

[example /]

Пробел перед маркером необязателен. Пробелы после маркера не допускаются. Такой маркер является чисто косметическим и ни на что не влияет.

Контентные шорткоды не могут использовать self-closing маркер.

Имя шорткода

Имя шорткода не может содержать следующие символы: [ ] < > & / ' " - x00-x20 s n t:

  • Квадратные скобки: []
  • Угловые скобки: < >
  • Амперсанд: &
  • Косая черта: /
  • Невидимые символы: пробел, перевод строки, tab
  • Непечатные символы: x00 - x20
  • Кавычки: ' "

Тире - разрешается в названии шорткода и оно не вызывает никаких конфликтов! Однако в официальной документации сказано что могут быть конфликты — это устаревшая информация.

Атрибуты шорткода

Атрибуты указывать не обязательно, между именем и атрибутами нужен как минимум один пробел. Если указывается несколько атрибутов, каждый атрибут должен быть разделен по крайней мере одним пробелом.

Каждый атрибут должен соответствовать одному из этих форматов:

[name attribute = 'value']

[name attribute = "value"]

[name attribute = value]

[name "value" "value2"]

[name "value"]

[name value]

Пробел допускается до и после знака =: attr = value, attr= value, attr =value.

Имя атрибута

Может содержать только следующие символы: 0-9 A-Z a-z _ - (пробелы в именах запрещены):

  • Прописные и строчные буквы: A-Za-z.
  • Числа: 0-9.
  • Нижнее подчеркивание: _.
  • Дефис: -.

Имя атрибута может быть в любом регистре. После парсинга имя всегда будет в нижнем регистре: aTtR=value тоже что и attr=value.

Значение атрибута

Значение атрибута не может содержать следующие символы [ ] " '.

Заметки по значению атрибута:

  • Кавычки атрибута. Двойные кавычки " допускаются внутри значений в одинарных кавычках ' и наоборот: [name foo='1 "2" 3' bar="4 '5' 6"]

  • Кавычки атрибута. Конструкция шорткода может использовать двойные или одинарные кавычки для выделения значений атрибута, или вообще их не использоваться, если в значении нет пробела. [name foo='123' bar=456] тоже что и [name foo="123" bar="456"].

  • Атрибут без имени. Имя атрибута можно не указывать. В этом случае имя атрибута будет индекс массива $atts. Например [name 123] создаст такие параметры: $atts = array( 0 => 123 ). Такие «позиционные» атрибуты можно использовать вместе с обычными, а кавычки можно использовать когда значение содержит пробелы или другие необычные символы.

  • Квадратные скобки. Так делать нельзя: [name foo="[value]"].

  • Экранировать спец-символы в атрибутах можно через кодирование HTML символов (HTML encoding).

  • HTML символы < и > поддерживаются в атрибутах ограничено. Например, этот шорткод не будет правильно работать, из-за символа >:

    [name value1="35" value2="25" compare=">"]

    Версия 4.0 умеет проверять HTML, так что следующий код будет работать:

    [name description="<b>Greetings</b>"]

    Чтобы полностью поддерживать HTML в атрибутах можно, сначала кодировать вводимые пользователем значения, а затем декодировать при обработке.

  • Удаляемые символы. Следующие символы, если они не экранированы, будут:

    • Неразрывный пробел (No-break space): xC2xA0 — заменится пробелом.
    • Безразмерный Пробел (Zero-width space): xE2x80x8B — удалится.

Экранирование

Экранирование нужно, когда шорткод зарегистрирован, но его не нужно обрабатывать, а нужно показать как есть. Не зарегистрированный шорткод и так не будет обрабатываться.

Для экранирования нужно обрамить шорткод еще одними квадратными скобками:

[[name attributes]]

[[name attributes]Любой HTML или Шорткоды.[/name]]

Другой вариант: заменить символы [] их HTML сущностями [ ]. Например [name] можно записать так: [name].

Вложенные шорткоды

Парсинг шорткодов срабатывает один раз для контента. Это значит, что если в Контентном шорткоде есть вложенный шорткод, он не будет обработан:

[name]Foo: [my_name][/name]

Обработается так:

<span class="caption">Foo: [my_name]</span>

Одинаковое название

Парсер не сможет обработать вложенные шорткоды с одинаковым названием, потому что уровень вложенности не подсчитывается. Такое ограничение сильно ускоряет обработку шорткодов:

[tag_a]
   [tag_a]
   [/tag_a]
[/tag_a]

Как это работает

При добавлении шорткода через add_shortcode() шорткод добавляется в глобальную переменную $shortcode_tags (добавляется имя и функция-обработчик).

На хуке the_content срабатывает функция do_shortcode(), которая ищет и обрабатывает все шорткоды в контенте.

Все найденные шорткоды по-очереди передаются в функцию do_shortcode_tag(). Эта функция обрабатывает данные найденные регуляркой и вызывает добавленную в $shortcode_tags функцию-обработчик шорткода (с параметрами $attr, $content, $tag).

То что вернула функция-обработчик заменят шорткод в контенте.

До срабатывания функции do_shortcode() (до парсинга шорткодов), контент обрабатывается тремя ключевыми функциями:

  • do_blocks()
  • wptexturize()
  • wpautop()
add_filter( 'the_content', 'do_blocks', 9 );
add_filter( 'the_content', 'wptexturize' );
add_filter( 'the_content', 'wpautop' );

add_filter( 'the_content', 'do_shortcode', 11 ); // AFTER wpautop().

do_shortcode() парсит контент одной регуляркой get_shortcode_regex(), поэтому добавление еще одного шорткода никак не замедляет скорость обработки — регулярка все равно будет отрабатывать.

Создание шорткода

Для создания шорткода используется функция add_shortcode(). Она принимает два параметра: имя шорткода и название PHP функции, которая будет обрабатывать шорткод.

Вот самый простой PHP-код который регистрирует новый шорткод [foobar]:

add_shortcode( 'foobar', 'foobar_shortcode' );

function foobar_shortcode( $atts ){
	return 'Привет! Я шорткод.';
}

Теперь [foobar] в контенте записи изменяться на строку: «Привет! Я шорткод.»

Атрибуты шорткода

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

add_shortcode( 'foobar', 'foobar_shortcode' );
function foobar_shortcode( $atts ) {

	$atts = shortcode_atts( [
		'name' => 'Noname',
		'age'  => 18,
	], $atts );

	return "Меня зовут {$atts['name']} мне {$atts['age']} лет";
}

Теперь [foobar name="Виктор" age="25"] в контенте измениться на строку: «Меня зовут Виктор мне 25 лет».

shortcode_atts() определяет какие у шорткода могут быть атрибуты, задает им дефолтные значения и удаляет неопознанные атрибуты.

shortcode_atts( $defaults, $atts );
$defaults

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

ВАЖНО! Ключи массива $defaults должны быть в lower-case. Не используйте camelCase или UPPER-CASE, потому что в $atts ключи всегда в lower-case.

$atts

Неочищенный массив с данными, которые были указаны в шорткоде. Они будут сравниваться с массивом выше.

$atts будет содержать массив аргументов шорткода, которые были указанны пользователем.

Если указать значение без названия параметра, то они будут добавлены в индексные элементы массива. Например для шорткода [name value attr="val2" val3] получим:

Array (
	[0]    => value
	[attr] => val2
	[1]    => val3
)

Имена атрибутов (ключи массива $atts) всегда конвертируются в lower-case (нижний регистр), значения никак не обрабатываются. Например, если мы указали шорткод так [myshortcode FOO="BAR"], то в $atts получим [ 'foo' => 'BAR' ].

Рассмотрим еще один пример.

Пусть мы указали в контенте шорткод [myname foo="456" bar="something"]. Тогда:

add_shortcode( 'myname', 'my_shortcode_handler' );

function my_shortcode_handler( $atts ) {

	/*
	$atts = [
		'foo' => 456,
		'bar' => 'something'
	]
	*/

	$data = shortcode_atts( [
		'title' => 'My Title',
		'foo'   => 123,
	], $atts );

	/*
	$data = [
		'title' => 'My Title',
		'foo'   => 456
	]
	*/
}

Из кода видно, что приняли мы одни данные, а получили после обработки другие. Что изменилось?

  • Полученное значение $atts[‘foo’] перезаписало значение по умолчанию.
  • Полученный элемент $atts[‘bar’] был удален, потому что его нет в списке возможных аргументов.
  • Недостающий элемент $atts[‘title’] был добавлен со значением по умолчанию.

Вывод функции обработчика

Возвращаемое значение функции обработчика шорткода вставляется в контент записи вместо самого шорткода.

Результат функции-обработчика шорткода всегда должен возвращаться, а не выводиться на экран. Используйте return, а не echo в функции обработчике.

Буфиризация вывода

Если в шорткоде используется много HTML кода, то для удобства можно использовать функцию ob_start(), чтобы буферизировать вывод и затем его вернуть:

function my_shortcode(){
	ob_start();

	?> <HTML> <here> ... <?php

	return ob_get_clean();
}

Контентные шорткоды

Примеры выше показывали как создавать «Одиночные» (self-closing) шорткоды: [name]. Но кроме них есть еще «Контентные» (enclosing) шорткоды: [name]Контент[/name].

Для Enclosing шорткода функция-обработчик получит второй параметр содержащей контент.

function my_shortcode( $atts, $content )

Зарегистрированный шорткод всегда можно использовать как Одиночный или Контентный, поэтому при регистрации шорткода желательно всегда указывать значение по умолчанию для второго параметра $content.

Или можно использовать проверку empty( $content ) для разделения обработки данных Контентного и Одиночного шорткодов. Т.е. получается один шорткод можно использовать как два разных, в зависимости от того как он был использован.

Рассмотрим пример:

add_shortcode( 'name', 'my_shortcode' );

function my_shortcode( $atts, $content ) {
	return '<span class="caption">' . $content . '</span>';
}

Теперь если написать шорткод так:

[name]My Caption[/name]

Получим такой результат:

<span class="caption">My Caption</span>

$content передается в функцию без какой-либо очистки, поэтому в нём может быть HTML:

[name]<a href="<a class="external" href="http://example.com/" rel="nofollow">http://example.com/</a>">My Caption</a>[/name]

Получим:

<span class="caption">
	<a href="http://example.com/">My Caption</a>
</span>

Иногда наоборот, когда HTML недопустим нужно очищать вывод, удаляя все HTML теги функцией wp_strip_all_tags().

Атрибуты в Контентном шорткоде

В Контентном шорткоде можно также как и в Одиночном, указать атрибуты. Например разрешим атрибут class:

function my_shortcode( $atts, $content ) {

	$data = shortcode_atts( [
		'class' => 'caption',
	], $atts );

	return '<span class="' . esc_attr( $a['class'] ) . '">' . $content . '</span>';
}

/*
[name class="headline"]My Caption[/name]

<span class="headline">My Caption</span>
*/

Вложенные шорткоды

Если в Контентном шорткоде есть вложенный шорткод, он не будет обработан.

[tag_a]
   [tag_b size="24"]
	  [tag_c]
   [/tag_b]
[/tag_a]

Поэтому если все же нужно нужно обработать шорткод внутри шорткода, то при обработке контента первого шорткода, нужно использовать функцию do_shortcode(), чтобы обработать вложенные шорткоды.

function my_shortcode( $atts, $content ) {
	return '<span class="caption">' . do_shortcode( $content ) . '</span>';
}

Удаление шорткода

Для удаления (де-регистрации) используется Функция remove_shortcode( $name ).

Удалять шорткод нужно после того как он был добавлен, поэтому вызывать эту функцию лучше во время события init.

Для примера, давайте представим что плагин регистрирует шорткод [awesome], а нам он мешает. Удалим его так:

add_action( 'init', 'unregister_shortcodes', 20 );
function unregister_shortcodes(){
	remove_shortcode( 'awesome' );
}

Также в Shortcode API есть функция которая удаляет все зарегистрированные шорткоды разом: см. remove_all_shortcodes().

PHP Функции

add_shortcode() Добавляет новый шоткод и хук для него.
shortcode_atts() Обрабатывает атрибуты (параметры) шорткода: добавляет значения по умолчанию когда нужно и удаляет неподходящие атрибуты.
remove_shortcode() Удаляет зарегистрированный шорткод.
remove_all_shortcodes() Удаляет все зарегистрированные шоткоды.
do_shortcode() Находит в переданном тексте зарегистрированные шорткоды и обрабатывает их.
apply_shortcodes() Это новое название (алиас) функции do_shortcode().
has_shortcode() Проверяет есть ли в переданном тексте указанный шоткод.
shortcode_exists() Проверяет зарегистрирован ли указанный шоткод.
strip_shortcodes() Удаляет/вырезает все шоткоды из переданного текста (контента).

Полный список функций.

Заметки

wpautop

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

wpautop() распознает зарегистрированные шорткоды и не обрабатывает их (не добавляет p или br теги вокруг или внутри).

wptexturize

Шорткоды обрабатываются после того, как контент записи будет обработан функцией wptexturize(). Она обрабатывает незарегистрированные шорткоды как обычный текст, и заменяет в нем кавычки.

Чтобы этого не происходило шорткод можно обернуть в тег <code> или <pre>. Текст внутри этих тегов wptexturize() не обрабатывает. Пример:

[name attr=“value”]

<code>[name attr="value"]</code>

Или можно добавить шорткод в список не-текстурируемых шорткодов. Делается это через хук no_texturize_shortcodes.

Разные функции для одного шорткода

Если зарегистрировать два шорткода с одинаковыми названиями, но разными функциями-обработчиками, то применяться будет последняя функция. Т.е. сработает шорткод добавленный последним.

add_shortcode( 'name', 'name_shortcode' );
add_shortcode( 'name', 'noname_shortcode' );

function name_shortcode(){
	return 'name shortcode';
}

function noname_shortcode(){
	return 'noname shortcode';
}

/*
[name] в контенте выведет строку "noname shortcode"
*/

Одна функция для разных шорткодов

add_shortcode( 'foo', 'my_function' );
add_shortcode( 'bar', 'my_function' );

Если два шорткода используют одну и туже функцию-обработчик, то в коде можно получить название (имя) текущего шорткода — оно передается в функцию-обработчик в третьем параметре:

function my_shortcode( $attr, $content, $tag ){

	if( 'foo' === $tag ){
		// Обработка шорткода [foo]
	}

	elseif( 'bar' === $tag ){
		// Обработка шорткода [bar]
	}

}

Смешанный вызов одного шорткода

Парсер не умеет обрабатывать смешанный вызов одно шорткода, когда он вызывается как Self-closed и Enclosing. Например:

[name attr='non-enclosing' /] просто текст [name]текст шорткода[/name]

Вместо того, чтобы распарсить эту строку как два шорткода разделенные строкой просто текст. Парсер поймет это как единый Контентный шорткод с текстом просто текст [name]текст шорткода.

Незарегистрированные шорткоды

Некоторые авторы плагинов не регистрируют шорткод, например, чтобы отключить вложенный шорткод до тех пор, пока не будет вызвана функция обработчика родительского шорткода. Это может привести к тому что шорткоды станут нерабочими. Например:

[tag_a unit="north"]
   [tag_b size="24"]
	  [tag_c color="red"]
   [/tag_b]
[/tag_a]

Если не регистрировать шорткоды tag_b и tag_c, то wptexturize() превратит код в следующий, еще до того как шорткод tag_a будет обработан:

[tag_a unit="north"]
   [tag_b size=”24”]
	  [tag_c color=”red”]
   [/tag_b]
[/tag_a]

Незарегистрированные шорткоды будут считаться обычным текстом, который не имеет особого значения. Чтобы шорткод имел значение для wptexturize() его можно добавить в список через хук no_texturize_shortcodes:

add_shortcode( 'tag_a', 'my_tag_a_handler' );
add_filter( 'no_texturize_shortcodes', 'ignore_tag_a' );

function ignore_tag_a( $list ) {
	$list[] = 'tag_a';
	return $list;
}

Незакрытые шорткоды

В некоторых случаях анализатор шорткодов не может корректно работать с одним шорткодом, который используется как Одиночный и Контентный шорткод. Например в этом случае синтаксический анализатор будет правильно идентифицировать только второй экземпляр шорткода:

[tag]
[tag]
   CONTENT
[/tag]

Однако так проанализирует оба:

[tag]
   CONTENT
[/tag]
[tag]

Шорткод в атрибуте HTML тега

Начиная с версии 4.2.3 были наложены ограничения на использование шорткодов внутри HTML тегов. Например, следующий шорткод не будет работать корректно, поскольку он вложен в атрибут скрипта:

<a onclick="[tag]">

Обойти это можно создав шорткод, который выводит весь необходимый HTML, а не только одно значение.

[link onclick="tag"]

Тесты Shortcode API

Тесты с интересными примерами ошибок и необычного синтаксиса можно найти по этой ссылке: https://unit-tests.svn.wordpress.org/trunk/tests/shortcode.php

  • Офф. документация 1
  • Офф. документация 2

Содержание

  1. Вставить шорткод в запись или страницу
  2. В классическом редакторе WordPress
  3. В Gutenberg
  4. В плагине Elementor
  5. Вставить напрямую в шаблон
  6. С помощью функций темы
  7. В PHP документе
  8. В виджетах
  9. Виджет текст
  10. С помощью плагина

Вставить шорткод в запись или страницу

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

В классическом редакторе WordPress

Если вы любите пользоваться классическим редактором, то входим в статью и во вкладке визуально в необходимое место нужно вставить. Разберу на примере форм от плагина Contact Form 7.

Визуальный редактор
Вкладка визуально

Можно через предварительный просмотр WordPress увидеть, что отображается на экране.

Предварительный просмотр
Форма

Не важно где выводить во вкладке Визуально или Текст (html редактор), шорткод сработает. Перед каждой проверкой очищаем кэш.

В Gutenberg

В Gutenberg существует специальный блок. Создаем запись, либо меняем старую и смотрим скриншот.

Блок гутенберга
Шорткод в гутенберге
  • Нажимаем плюс
  • Находим раздел Виджеты
  • Выбираем одноименный инструмент

На экране появится новый блок, в который заносим скопированную конфигурацию.

Прописываем шорткод
Новый блок

Нажимаем на предварительный просмотр и видим ту же картину. Простые методы прошли переходим к более сложным.

Предварительный просмотр
Форма

В плагине Elementor

В elementor есть специальная кнопка чтобы вставить шорткод, в панели находим соответствующий раздел.

Вставить шорткод в elementor
Инструмент в elementor

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

Вставить напрямую в шаблон

Существует ситуация, когда нужно вывести не в контенте, а в коде шаблона, тогда переходим к более кардинальным мерам.

С помощью функций темы

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

Поля ввода html кода в шаблонах
Раздел Code Editor
  1. Нашел где можно прописать шорткод
  2. Вижу, что на предварительно просмотре форма работает
  3. Если все устраивает, то нажимаю опубликовать

Далеко не все темы поддерживают вставку текста в разные части документа. Если такой области нет, то переходим к следующему пункту.

В PHP документе

В WordPress существует специальная PHP функция, если просто вставить в шаблон, то на экране ничего не появится. Вот код, который нужно применить:

<?php echo do_shortcode('[шорткод]'); ?>

То есть в нашем случае получится такая картина:

<?php echo do_shortcode('

    '); ?>

    Хочу разместить форму обратной связи под постами. Какой файл у вас отвечает за вывод того или иного элемента предсказать не могу. В моем случае content-single.

    Помещаем PHP в файл вывода записей
    Куда вставлять PHP
    1. Заходим в редактор тем
    2. Находим файл в который необходимо вставить информацию
    3. Определил, что блок вывода контента это div с классом entry-content, и перед закрывающим тегом прописал функцию
    4. Обновляем страницу и смотрим, элемент отобразился где нужно, под контентом.
    Вывод элемента в контенте
    Обратная связь под контентом

    В виджетах

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

    Разумное решение, безопасность превыше всего, но если набрались смелости залить в vidgets WordPress, то читаем дальше.

    Виджет текст

    С помощью модуля Текст можно вставить шорткод, но это касается WordPress версий 5.0 и выше. Смотрим на скриншот, перетаскиваем его в активную зону и сохраняем изменения.

    Виджет текст

    Текст

    Смотрим, если сработало, то дальше можно не читать, если нет, то продолжаем. Не знаю от чего зависит, но иногда Текст не срабатывает, из-за того что WordPress запрещает вывод шорткода, тогда идем в файл Function активной темы, помещаем следующее правило и сохраняем.

    add_filter( 'widget_text', 'do_shortcode' );

    PHP фильтр

    Фильтр

    Проделываем манипуляции сначала, и если опять не сработало, то применяем следующий способ. Для лучшего понимания материала приложу свой видео обзор.

    С помощью плагина

    Существует отличный плагин Shortcode Widget скачиваем или устанавливаем из админки WordPress, так он выглядит в поиске.

    Плагин в поиске
    Shortcode widget в поиске

    Заходим Внешний вид > Виджеты, там появиться новый раздел Shortcode Widget. Перетаскиваем в активную зону, прописываем и сохраняем

    Возможность от SW
    Shortcode widget

    Это 100% способ, если он не помог, то причина скорее всего в ядре WordPress. На этом закончу в статье разобрались как вставить шорткоды в WordPress различными методами и способами, напишите пожалуйста, статья вам помогла?

    Пожалуйста, оцените материал:

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

    В этой статье мы расскажем, как легко добавить шорткод в WordPress, а также создавать кастомные шорткоды с помощью Shortcode API.

    Что такое шорткод в WordPress

    Шорткоды — это ярлык кода, который позволяет добавлять динамический контент к различным типам записей, боковым панелям и шаблонам.

    Синтаксис шорткода представляет собой текст (ключевое число) внутри квадратных скобок.

    Простой шорткод без параметров выглядит так:

    [shortcode]

    Шорткод с параметрами имеет вид:

    [shortcode params="foo"]

    Шорткод с текстом в качестве параметра обычно выглядит, так:

    [shortcode]Здесь может быть любой текст[/shortcode]

    Косая черта может применяться, как в одиночных, так и в контентных шорткодах:

    [shortcode /]
    [shortcode]Еще один пример[/shortcode]

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

    Shortcode API

    Система WordPress в целях безопасности при сохранении контента выполняет фильтрацию данных, чтобы не допустить внесения выполняемого вредоносного кода в базу данных.

    Это означает, что вы можете писать HTML-разметку в своих постах, но не можете выполнить PHP-код и сценарии JavaScript.

    Shortcode API позволяет разработчикам добавлять свой код внутрь функции, а затем зарегистрировать ее в WordPress в качестве шорткода для вызова в контенте.

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

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

    Как добавить шорткод на страницу в WordPress

    Если вы используете редактор Gutenberg, добавьте новый блок с типом Шорткод в процессе редактирования записи:

    Добавление шорткода в редакторе блоков Gutenberg

    Если вы используете классический редактор начните редактирование записи в которой вы хотите добавить динамический контент. Вы можете вставить шорткод в любом месте текстового редактора:

    Добавление шорткода в классическом редакторе WordPress

    Для добавления шорткода на боковую панель, перейдите на экран Внешний вид -> Виджеты и добавьте новый виджет типа Блок:

    Добавление шорткода в сайдбар с помощью виджета

    Для вставки шорткода в шаблон WordPress используйте функцию do_shortcode():

    <?php echo do_shortcode("[shortcode]"); ?>

    Создание шорткодов в WordPress

    В качестве примера напишем простой кастомный шорткод с помощью функции add_shortcode(), который вернет некоторый результат.

    Добавим код в functions.php:

    <?php 
    add_shortcode( 'shortcode', 'example_shortcode' );
        function example_shortcode( $atts ) {
            return 'Привет, мир!';
    }
    ?>

    Вставим шорткод [shortcode] в текст записи и увидим результат выполнения функции:

    Привет, мир!

    Шорткод с поддержкой параметров

    Пример шорткода с поддержкой параметров:

    <?php 
    add_shortcode( 'car', 'car_shortcode' );
        function car_shortcode( $atts ) {
            $atts = shortcode_atts( [
                'brand' => 'Марка автомобиля',
                'hp'  => 0,
    	], $atts );
        return "Мощность автомобиля {$atts['brand']} — {$atts['hp']} лошадиных сил";
    }
    ?>

    Размещаем шорткод с двумя параметрами [car brand=»Porsche» hp=»220″] в тексте записи и получаем результат:

    Мощность автомобиля Porsche — 220 лошадиных сил.

    Контентный шорткод

    Обычно контентный шорткод используют для обрамления какого-либо фрагмента текста. Например, на сайте используется цитирование, которое представляет текст внутри тега <blockquote> с каким-то текстом внутри.

    Для удобства редактирования записей можно сформировать шорткод, который будет содержать в себе обертку HTML, которую так не любят контент-менеджеры:

    <?php 
    add_shortcode( 'blockquote', 'blockquote_shortcode' );
        function blockquote_shortcode( $atts, $text ) {
            return '<blockquote>' . $text . '</blockquote>';
    }
    ?>

    Чтобы использовать этот шорткод, добавьте его в текст записи:

    [blockquote]Еще одна цитата[/blockquote]

    Контентный шорткод с поддержкой атрибутов

    Вывод цитат можно преобразовать в блоки внимания, добавив поддержку атрибутов. Например, вы часто используете блоки внимания в своих записях для вывода: примечаний, цитат и предупреждений.

    <?php 
    add_shortcode( 'blockquote', 'blockquote_shortcode' );
        function blockquote_shortcode( $atts, $text ) {
    	$atts = shortcode_atts( [
    		'class' => 'example',
    	], $atts );
        return '<blockquote class="' . esc_attr( $atts['class'] ) . '">' . $text . '</blockquote>';
    }
    ?>

    Теперь мы сможем задать класс для тега <blockquote> и добавить текст:

    [blockquote class="danger"]Внимание! Продукция для лиц старше 16 лет.[/blockquote]

    Шорткод с буферизацией вывода

    Чтобы вставить в текст записи фрагменты HTML, PHP-код или JS-сценарий, воспользуемся буферизацией вывода в PHP.

    Например, добавим рекламный блок Рекламной сети Яндекса в контент на странице с помощью шорткода. Вывод рекламного блока без буферизации:

    <?php 
    add_shortcode('sponsored', 'yandex_rtb'); 
        function yandex_rtb() { 
            $string .= '<div id="yandex_rtb_R-A" class="yandex_rtb_container"></div>
                <script>window.yaContextCb.push(()=>{
                    Ya.Context.AdvManager.render({
                        renderTo: "yandex_rtb_R-A",
                        blockId: "R-A-0000-00"
                    })
                })</script>';
        return $string;
    }
    ?>

    Пример кода c буферизацией вывода:

    <?php 
    add_shortcode('sponsored', 'yandex_rtb');
        function yandex_rtb() {
            ob_start(); 
    ?>
    	<div id="yandex_rtb_R-A" class="yandex_rtb_container"></div>
    	<script>window.yaContextCb.push(()=>{
    		Ya.Context.AdvManager.render({
    			renderTo: 'yandex_rtb_R-A',
    			blockId: 'R-A-0000-00'
    		})
    	})</script>
    <?php 
    	return ob_get_clean(); 
    } ?>

    В результате шорткод [sponsored] покажет рекламное объявление на странице.

    Удаление шорткодов в WordPress

    Чтобы удалить шорткод воспользуйтесь функцией remove_shortcode(). Функция принимает лишь один параметр: имя шорткода, который требуется снять с регистрации.

    <?php add_action( 'init', 'delete_shortcode', 20 );
    function delete_shortcode(){
        remove_shortcode( 'sponsored' );
    }
    ?>

    Шорткод  — это специальный код WordPress, который позволяет вам делать классные вещи без усилий. Шорткоды помогают внедрять файлы или создавать объекты, для которых обычно требуется много строк громоздкого кода. Шорткод = ссылка.

     Блок шорткода  можно добавить на страницу, нажав кнопку «Добавить блок». Ее можно найти в разделе Виджеты. Или можно набрать /шорткода и нажать клавишу ввода.

    Слэш-команда блока шорткода

    Добавляйте шорткоды с помощью слэш-команды.

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

    Панель инструментов блока

    В отличие от обычных блоков блок шорткода  не добавляет специальные настройки на панель инструментов блоков или боковую панель редактора.

    Боковая панель редактора блока шорткода

    Боковая панель редактора блока шорткода

    Написание своего шорткода

    Вы можете ввести свой шорткод в предназначенное поле или скопировать и вставить один из доступных шорткодов.

    Интерфейс блока шорткода

    Интерфейс блока шорткода.

    поиск в /wp-content/ по «add_shortcode(‘su_slider’…» может не дать результатов.

    бывают плагины, которые добавляют свои шорткоды не через стандартные функции, бываеют добавляют через класс, бывает название шорткода собирают динамически (типо так add_shortcode( $prefix. ‘_’ . $scope ) и тп

    в тех случаях, когда не получилось найти по add_shortcode(‘su_slider’, стоит пытаться искать по тому коду, который этот шорткод генерирует.
    Например, если он на фронте рендерит что-то вот такое:

    то можно попробовать поискать и по этому коду.

    если и так найти не получится — тогда ищем в сгенерированном шорткодом html или в параметрах к этому шорткоду любое уникальное слово и ищем в /wp-content/ по этому слову

    Понравилась статья? Поделить с друзьями:
  • Как исправить номера счетов фактур в книге продаж
  • Как составить проект устава
  • Как найти покупатель риелтору
  • Как можно найти афон
  • Как начинающему бухгалтеру составить баланс