add_shortcode()
Добавляет новый шоткод и хук для него.
Для каждого шоткода может быть создана только одна функция обработчик. А значит, если другой плагин использует такой же шоткод, то ваша функция будет заменена на другую или наоборот (зависит от того в каком порядке подключаются функции).
Использует глобальную переменную global $shortcode_tags.
Читайте обязательно: Создание шорткода в WordPress
Хуков нет.
Возвращает
null. Ничего не возвращает.
Использование
add_shortcode( $tag, $callback );
- $tag(строка) (обязательный)
Название шоткода, который будет использоваться в тексте. Например: 'gallery'.
В названии нельзя использовать пробелы и нестандартные символы вроде:
& / < > [ ] =.- $callback(строка) (обязательный)
Название функции, которая будет выводить контент шортнкода - заменять шортнод на что-то.
Функция шорткода должна вернуть данные, а не выводить их -
return, а неecho.Функция получает три параметра:
-
$atts(массив)
Ассоциативный массив атрибутов указанных в шорткоде. Подробнее про атрибуты шорткода.Имена атрибутов шорткода всегда преобразуются в нижний регистр до того, как они передаются в функцию-обработчик.
По умолчанию: '' (пустая строка - нет атрибутов)
-
$content(строка)
Текст шорткода, когда используется контентный шорткод: [foo]текст шорткода[/foo]
По умолчанию: '' - $tag(строка)
Имя шорткода. Передается в хуки. Например, для шорткода[foo], тег будетfoo.
-
Примеры
#1 Пример регистрации шоткода [footag foo="bar"]:
add_shortcode( 'footag', 'footag_func' );
function footag_func( $atts ){
return "foo = ". $atts['foo'];
}
// результат:
// шоткод [footag foo="bar"] в тексте будет заменен на "foo = bar" #2 Регистрация шоткода для классов
Если ваш плагин написан классом:
add_shortcode( 'baztag', [ 'MyPlugin', 'baztag_func' ] );
class MyPlugin {
static function baztag_func( $atts, $content ) {
return "content = $content";
}
} #3 Вставка iframe через шорткод
Этот пример показывает как создать шорткод, чтобы потом через него вставлять iframe.
add_shortcode( 'iframe', 'Generate_iframe' );
function Generate_iframe( $atts ) {
$atts = shortcode_atts( [
'href' => 'http://example.com',
'height' => '550px',
'width' => '600px',
], $atts );
return strtr( '
<iframe src="{src}" width="{width}" height="{height}">
<p>Your Browser does not support Iframes.</p>
</iframe>',
[
'{src}' => esc_attr( $atts['href'] ),
'{width}' => esc_attr( $atts['width'] ),
'{height}' => esc_attr( $atts['height'] ),
]
);
}
// использование:
// [iframe href="http://www.exmaple.com" height="480" width="640"] #4 Одна функция для нескольких шорткодов
Допустим нам нужно создать несколько однотипных шорткодов, у которых разрешены одни и те же параметры. Для этого не обязательно для каждого шорткода создавать свою PHP функцию, а можно использовать одну функцию для всех шорткодов.
Чтобы внутри функции понять какой именно шорткод отрабатывает, в функцию шорткода передается третий параметр, в котором содержится название текущего шорткода:
add_shortcode( 'baz-up', 'baz_func' );
add_shortcode( 'baz-down', 'baz_func' );
function baz_func( $atts, $content, $tag ) {
// какая-то общая логика, например обработка переменных $atts
$atts = shortcode_atts( array(
'foo' => 'no foo',
'baz' => 'default baz'
), $atts );
if( 'baz-up' === $tag ){
$content = 'Конетнт шорткода [baz-up] - ' . $atts['foo'];
}
elseif( 'baz-down' === $tag ){
$content = 'Конетнт шорткода [baz-down] - ' . $atts['foo'];
}
return $content;
} #5 Регистрация шорткода с контентом
Пример создания такого шоткода: [baztag]здесь текст[/baztag]:
add_shortcode( 'baztag', 'baztag_func' );
function baztag_func( $atts, $content ) {
return "content = $content";
}
// результат:
// конструкция шоткода будет заменена на "content = здесь текст" #6 Установка белого списка атрибутов шорткода
Для того чтобы шорткод мог иметь только указанные нами параметры и у этих параметров были значения по умолчанию, нужно использовать функцию shortcode_atts():
add_shortcode( 'bartag', 'bartag_func' );
function bartag_func( $atts ){
// белый список параметров и значения по умолчанию
$atts = shortcode_atts( array(
'foo' => 'no foo',
'baz' => 'default baz'
), $atts );
return "foo = {$atts['foo']}";
} #7 Вывод записи по ID через шорткод
Получим пост по ID, используя шорткод [testimonials id="272"] в файле темы functions.php.
add_shortcode( 'testimonials', 'testimonials_shortcode_handler' );
function testimonials_shortcode_handler( $atts ){
global $post;
$rg = (object) shortcode_atts( [
'id' => null
], $atts );
if( ! $post = get_post( $rg->id ) )
return '';
$url = wp_get_attachment_url( get_post_thumbnail_id( $post->ID ) );
$out = '
<div class="testimonial">
<div class="testimonial-img">
<img src="'. $url .'" />
</div>
<div class="testimonial-content">
<img src="' . esc_attr( $post->logo ) . '" alt="icon" />
<p class="testimonial_desc">'. get_the_content() .'</p>
<div class="author-details">
<img src="' . esc_attr( $post->author_image ) .'" alt="image">
<p>
'. esc_html( $post->author_name ) .'
<span>'. esc_html( $post->author_designation ) .'</span>
</p>
</div>
</div>
</div>
';
wp_reset_postdata();
return $out;
} #8 Подключение шаблонов темы в шорткоде
Пусть нам надо подключать через шорткод специально подготовленный файл:
add_shortcode( '4cards', 'shortcode_4cards' );
function shortcode_4cards() {
ob_start();
/**
* Подключает файл по пути:
* мой_домен/wp-content/themes/моя_тема/templates/shortcodes/4_cards.php
*/
get_template_part( 'templates/shortcodes/4_cards' );
return ob_get_clean();
}
// Пример вызова шорткода: ``[4cards]``
Благодаря параметрам, которые можно передавать в шорткод, можно предусмотреть динамическое подключение нужного файла из папки. Доработаем пример:
add_shortcode( 'cards', 'shortcode_cards' );
function shortcode_cards( $atts ) {
ob_start();
// белый список параметров
$atts = shortcode_atts( [
'template' => '',
], $atts );
/**
* Подключает файл по пути:
* мой_домен/wp-content/themes/моя_тема/templates/shortcodes/переданное_имя_файла.php
*/
get_template_part( "templates/shortcodes/{$atts['template']}" );
return ob_get_clean();
}
Примеры вызова шорткода:
# /тема/templates/shortcodes/card-1.php [cards template="card-1"] # /тема/templates/shortcodes/card-2.php [cards template="card-2"] # /тема/templates/shortcodes/cart-1/block-1.php [cards template="cart-1/block-1"]
#9 Подключение стилей/скриптов только если шорткод есть
Смотрите заметку: Подключение скриптов/стилей, если в контенте есть шорткод.
Заметки
- Global. Массив.
$shortcode_tags
Список изменений
| С версии 2.5.0 | Введена. |