add_shortcode()
Добавляет новый шоткод и хук для него.
Для каждого шоткода может быть создана только одна функция обработчик. А значит, если другой плагин использует такой же шоткод, то ваша функция будет заменена на другую или наоборот (зависит от того в каком порядке подключаются функции).
Функция шорткода должна вернуть данные, а не выводить их - return
, а не echo
.
Использует глобальную переменную global $shortcode_tags
.
Читайте обязательно: Создание шорткода в WordPress
Хуков нет.
Возвращает
null
. Ничего не возвращает.
Использование
add_shortcode( $tag , $func );
- $tag(строка) (обязательный)
Название шоткода, который будет использоваться в тексте. Например: 'gallery'.
В названии нельзя использовать пробелы и нестандартные символы вроде:
& / < > [ ] =
.- $func(строка) (обязательный)
Название функции, которая должна сработать, если найден шоткод.
Функция получает три параметра:
-
$atts(массив)
Ассоциативный массив атрибутов указанных в шорткоде. Подробнее про атрибуты шорткода.
По умолчанию: '' (пустая строка - нет атрибутов) -
$content(строка)
Текст шорткода, когда используется контентный шорткод: [foo]текст шорткода[/foo]
По умолчанию: '' - $tag(строка)
Имя шорткода. Передается в хуки. Например, для шорткода[foo]
, тег будетfoo
.
-
Примеры
#1 Вставка iframe через шорткод
Этот пример показывает как создать шорткод, чтобы потом через него вставлять iframe.
add_shortcode( 'iframe', 'Generate_iframe' ); function Generate_iframe( $atts ) { $atts = shortcode_atts( array( 'href' => 'http://example.com', 'height' => '550px', 'width' => '600px', ), $atts ); return '<iframe src="'. $atts['href'] .'" width="'. $atts['width'] .'" height="'. $atts['height'] .'"> <p>Your Browser does not support Iframes.</p></iframe>'; } // использование: // [iframe href="http://www.exmaple.com" height="480" width="640"]
#2 Пример регистрации шоткода [footag foo="bar"]
:
add_shortcode( 'footag', 'footag_func' ); function footag_func( $atts ){ return "foo = ". $atts['foo']; } // результат: // шоткод [footag foo="bar"] в тексте будет заменен на "foo = bar"
#3 Регистрация шоткода для классов
Если ваш плагин написан классом:
add_shortcode( 'baztag', [ 'MyPlugin', 'baztag_func' ] ); class MyPlugin { static function baztag_func( $atts, $content ) { return "content = $content"; } }
#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 | Введена. |