add_shortcode()

Добавляет новый шорткод
Функция WordPress
INT 2.5.0
WordPress Icon

Описание функции

Функция add_shortcode() добавляет новый шорткод в WordPress. Шорткод — это специальная конструкция, которая позволяет вставлять динамический контент или функциональность в посты, страницы или другие места на сайте. При использовании шорткода, WordPress автоматически вызывает соответствующую функцию обратного вызова (callback), которую мы указываем при регистрации шорткода.

Использование

add_shortcode( string $tag, callable $callback )

В данном примере мы используем функцию add_shortcode() для добавления нового шорткода. Мы передаем два параметра: $tag — строка, обязательный параметр, указывает тег шорткода, который будет искаться в контенте поста, и $callback — функция обратного вызова, которая будет выполняться при обнаружении шорткода.

  • $tag (string) — Обязательный. Тег шорткода, который будет искаться в контенте поста.
  • $callback (callable) — Обязательный. Функция обратного вызова, которая будет выполняться при обнаружении шорткода. По умолчанию, функция обратного вызова принимает три параметра: массив атрибутов ($atts), содержимое шорткода или null, если оно не указано ($content), и сам тег шорткода ($shortcode_tag), в указанном порядке.
<?php
// Функция обратного вызова для шорткода [my_shortcode]
function my_shortcode_callback( $atts, $content, $shortcode_tag ) {
    // Обработка атрибутов шорткода
    $atts = shortcode_atts( array(
        'attr1' => 'default value',
        'attr2' => 'default value',
    ), $atts );
    // Вывод содержимого шорткода
    $output = 'Атрибут 1: ' . $atts['attr1'] . '<br>';
    $output .= 'Атрибут 2: ' . $atts['attr2'] . '<br>';
    $output .= 'Содержимое шорткода: ' . $content;
    return $output;
}
// Регистрация шорткода [my_shortcode]
add_shortcode( 'my_shortcode', 'my_shortcode_callback' );
?>

В этом примере мы создаем новый шорткод с тегом [my_shortcode]. При использовании этого шорткода, WordPress будет вызывать функцию my_shortcode_callback() в качестве функции обратного вызова. Внутри этой функции мы обрабатываем атрибуты шорткода с помощью функции shortcode_atts() и выводим содержимое шорткода в соответствии с заданным форматом. Затем мы возвращаем полученный результат.

Примеры использования

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


add_shortcode( 'hello', 'hello_shortcode' );
function hello_shortcode() {
    return 'Hello, world!';
}

В этом примере мы добавляем новый шорткод с тегом ‘hello’ и функцией обратного вызова ‘hello_shortcode’. Когда шорткод [hello] будет найден в содержимом записи, функция ‘hello_shortcode’ будет вызвана и вернет строку ‘Hello, world!’.

Использование атрибутов в шорткоде


add_shortcode( 'greeting', 'greeting_shortcode' );
function greeting_shortcode( $atts ) {
    $atts = shortcode_atts( array(
        'name' => 'Guest',
    ), $atts );
    return 'Hello, ' . $atts['name'] . '!';
}

В этом примере мы добавляем новый шорткод с тегом ‘greeting’ и функцией обратного вызова ‘greeting_shortcode’. Функция ‘greeting_shortcode’ принимает массив атрибутов ($atts), который содержит значения, переданные в шорткоде. Мы используем функцию ‘shortcode_atts’ для объединения переданных атрибутов со значениями по умолчанию. Затем мы возвращаем приветствие с использованием значения атрибута ‘name’ или значения по умолчанию, если атрибут не указан.

Обработка содержимого шорткода


add_shortcode( 'uppercase', 'uppercase_shortcode' );
function uppercase_shortcode( $atts, $content = null ) {
    if ( $content ) {
        return strtoupper( $content );
    }
}

В этом примере мы добавляем новый шорткод с тегом ‘uppercase’ и функцией обратного вызова ‘uppercase_shortcode’. Функция ‘uppercase_shortcode’ принимает массив атрибутов ($atts) и содержимое шорткода ($content). Если содержимое шорткода передано, мы возвращаем его в верхнем регистре с помощью функции ‘strtoupper’. Если содержимое шорткода не указано, ничего не возвращаем.

Передача тега шорткода в функцию


add_shortcode( 'current_shortcode', 'current_shortcode' );
function current_shortcode( $atts, $content = null, $shortcode_tag ) {
    return 'This shortcode is: ' . $shortcode_tag;
}

В этом примере мы добавляем новый шорткод с тегом ‘current_shortcode’ и функцией обратного вызова ‘current_shortcode’. Функция ‘current_shortcode’ принимает массив атрибутов ($atts), содержимое шорткода ($content) и тег шорткода ($shortcode_tag). Мы возвращаем строку, содержащую информацию о текущем теге шорткода.

Вопросы и ответы

Как создать новый шорткод?

Для создания нового шорткода в WordPress используется функция add_shortcode(). Она принимает два обязательных параметра: $tag (строка) и $callback (функция обратного вызова).

Первый параметр $tag представляет собой тег шорткода, который будет искаться в содержимом поста. Это может быть любая строка, например, «my_shortcode».

Второй параметр $callback — это функция, которая будет выполняться, когда шорткод будет найден. Функция обратного вызова должна быть определена заранее и принимать три параметра по умолчанию: массив атрибутов ($atts), содержимое шорткода или null, если оно не задано ($content), и имя шорткода ($shortcode_tag).


function my_shortcode_callback($atts, $content, $shortcode_tag) {
    // Ваш код обработки шорткода здесь
}
add_shortcode('my_shortcode', 'my_shortcode_callback');

Как передать атрибуты в шорткод?

Атрибуты шорткода могут быть переданы в функцию обратного вызова через массив $atts. Этот массив содержит пары ключ-значение, где ключ — это имя атрибута, а значение — его значение.

Например, если у вас есть шорткод [my_shortcode name="John" age="30"], то в функции обратного вызова вы можете получить значения атрибутов следующим образом:


function my_shortcode_callback($atts, $content, $shortcode_tag) {
    $name = $atts['name']; // "John"
    $age = $atts['age']; // "30"
    // Ваш код обработки шорткода здесь
}
add_shortcode('my_shortcode', 'my_shortcode_callback');

Как получить содержимое шорткода?

Содержимое шорткода может быть получено в функции обратного вызова через параметр $content. Если содержимое шорткода не задано, то значение этого параметра будет равно null.

Например, если у вас есть шорткод [my_shortcode]Hello World![/my_shortcode], то в функции обратного вызова вы можете получить содержимое следующим образом:


function my_shortcode_callback($atts, $content, $shortcode_tag) {
    $content; // "Hello World!"
    // Ваш код обработки шорткода здесь
}
add_shortcode('my_shortcode', 'my_shortcode_callback');

Как получить имя шорткода внутри функции обратного вызова?

Имя шорткода может быть получено в функции обратного вызова через параметр $shortcode_tag.

Например, если у вас есть шорткод [my_shortcode], то в функции обратного вызова вы можете получить имя шорткода следующим образом:


function my_shortcode_callback($atts, $content, $shortcode_tag) {
    $shortcode_tag; // "my_shortcode"
    // Ваш код обработки шорткода здесь
}
add_shortcode('my_shortcode', 'my_shortcode_callback');

Как использовать шорткод внутри другого шорткода?

Функция add_shortcode() в WordPress позволяет создавать и использовать шорткоды для удобного и быстрого добавления дополнительного функционала на страницы или записи сайта. Иногда возникает необходимость использовать один шорткод внутри другого. В таком случае, нужно учитывать порядок выполнения шорткодов.

Для того чтобы использовать шорткод внутри другого шорткода, необходимо убедиться, что второй шорткод будет обработан после первого. Для этого можно воспользоваться фильтром do_shortcode_tag.

// Первый шорткод
function first_shortcode_callback( $atts ) {
    // Код обработки первого шорткода
}
add_shortcode( 'first_shortcode', 'first_shortcode_callback' );
// Второй шорткод
function second_shortcode_callback( $atts ) {
    // Код обработки второго шорткода
    $content = do_shortcode( $atts['content'] ); // Обработка вложенного шорткода
    return $content;
}
add_shortcode( 'second_shortcode', 'second_shortcode_callback' );
// Использование вложенных шорткодов
echo do_shortcode( '[second_shortcode]Some text [first_shortcode][/second_shortcode]' );

Как проверить, существует ли шорткод с определенным тегом?

Иногда возникает необходимость проверить, существует ли шорткод с определенным тегом, перед его использованием. Для этого можно воспользоваться функцией shortcode_exists().

// Проверка существования шорткода
if ( shortcode_exists( 'my_shortcode' ) ) {
    // Код, выполняемый при наличии шорткода
}

Как удалить существующий шорткод?

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

// Удаление существующего шорткода
remove_shortcode( 'my_shortcode' );

Как изменить порядок выполнения шорткодов на странице?

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

// Изменение порядка выполнения шорткодов
function custom_shortcode_order( $tags ) {
    $tags = array_reverse( $tags ); // Изменение порядка выполнения шорткодов
    return $tags;
}
add_filter( 'do_shortcode_tag', 'custom_shortcode_order' );

Функция add_shortcode() в WordPress предоставляет удобный способ добавления новых шорткодов на страницы или записи сайта. Она позволяет использовать шорткоды внутри других шорткодов, проверять и удалять существующие шорткоды, а также изменять порядок выполнения шорткодов на странице. Это значительно расширяет возможности разработчиков и позволяет создавать более гибкий и функциональный контент для пользователей.

Связанные элементы

  • Функция do_shortcode(): выполняет шорткоды в тексте.
  • Функция remove_shortcode(): удаляет зарегистрированный шорткод.
  • Функция shortcode_atts(): объединяет атрибуты шорткода с значениями по умолчанию.
  • Хук shortcode_atts_{$shortcode}: вызывается при объединении атрибутов шорткода.
  • Хук widget_text_content: вызывается при выводе текстового виджета.
  • Класс WP_Embed: предоставляет методы для встраивания контента.
  • Класс WP_Http: обеспечивает отправку HTTP-запросов.
  • Класс WP_Widget: базовый класс для создания виджетов.
Обсуждение