add_shortcode()
Додає новий шоткод та хук для нього.
Для кожного шоткод може бути створена тільки одна функція обробник. А значить, якщо інший плагін використовує такий самий шоткод, то ваша функція буде замінена на іншу або навпаки (залежить від того, в якому порядку підключаються функції).
Функція шорткоду має повернути дані, а не виводити їх! return, а не echo!
Використовує глобальну змінну global $shortcode_tags
.
Читайте обов’язково: Створення шорткоду в WordPress
Хуків немає.
Повертає
null
. Нічого не вертає.
Використання
add_shortcode($tag, $func);
-
$tag
(рядок) (обов’язковий) Назва шоткод, який буде використовуватися в тексті. Наприклад: ‘gallery’.
У назві не можна використовувати пробіли та нестандартні символи на кшталт:
& / < > [ ] =
.-
$func
(рядок) (обов’язковий) Назва функції, яка має спрацювати, якщо знайдено шоткод.
Функція отримує три параметри:
$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 Одна функція для кількох шорткодів
Допустимо нам потрібно створити кілька однотипних шорткодів, у яких дозволені одні й самі параметри. Для цього не обов’язково для кожного шорткоду створювати свою функцію 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; }
#3 Реєстрація шорткоду з контентом
Приклад створення такого шоткоду [baztag]здесь текст[/baztag]
:
add_shortcode( 'baztag', 'baztag_func'); function baztag_func( $atts, $content ) { return "content = $content"; } //Результат: // конструкція шоткода буде замінена "content = тут текст"
#4 Реєстрація шоткоду для класів
Якщо ваш плагін написаний класом:
add_shortcode( 'baztag', [ 'MyPlugin', 'baztag_func' ] ); class MyPlugin { static function baztag_func( $atts, $content ) { return "content = $content"; } }
#5 Встановлення білого списку атрибутів шорткоду
Для того щоб шорткод міг мати лише вказані нами параметри і ці параметри мали значення за замовчуванням, потрібно використовувати функцію 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']}"; }
#6 Вставка 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 не підтримує Iframes.</p></iframe>'; } // Використання: // [iframe href="http://www.exmaple.com" height="480" width="640"]
#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 | Введено. |