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 | Введено. |