Содержание
Задача. Необходимо зарегистрировать шорткод, который выводил бы нужный контент, потом вставить в шаблон темы, проверив перед вставкой.
Регистрация пользовательского шорткода
Решение. Свой шорткод в WordPress можно зарегистрировать (добавить) с помощью функции add_shortcode()
в файле темы – function.php
. В аргументах функции указывается имя шорткода и функция, которая будет возвращать необходимый нам контент.
1 2 3 4 5 6 7 8 9 10 11 |
/* регистрация шорткода [name_shortcode] для вывода какого-то текста обернутого в div с классом */ function function_shortcode( ){ return '<div class="my-class">Текст</div>'; } add_shortcode( 'name_shortcode', 'function_shortcode' ); /* Результат: Вставленный шорткод [name_shortcode] выведет на странице "Текст" обернутый в div с классом "my-class" */ |
Теперь шорткод можно вывести через редактор постов, страниц и т.п. как [name_shortcode]
или если в шаблоне темы, то так — <?php echo do_shortcode('[name_shortcode]'); ?>
Более сложные случаи можно посмотреть в источнике.
Вывод шорткода
Решение. Когда нужно вставить щорткод в шаблон темы используем функцию do_shortcode()
— Код №2:
1 2 3 4 5 |
## Вставка шорткода echo do_shortcode('[my-shortcode]'); echo do_shortcode('[my-shortcode id="123"]'); |
Атрибуты шорткода
Чтобы использовать атрибуты, нужно в функции шорткода добавить параметр, массив атрибутов — Код №3:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
add_shortcode( 'foobar', 'qfurs_my_shortcode' ); function qfurs_my_shortcode( $atts ) { $atts = shortcode_atts( [ 'level' => 1, 'txt' => 'Начало', ], $atts ); ob_start(); echo 'Уровень ' . $atts["level"] . ' название ' . $atts["txt"]; $output = ob_get_clean(); return $output; } /* [qfurs_my_shortcode level = "3" txt = "мой текст"] */ |
Проверка шорткода перед выводом
Решение. Иногда следует проверить существует ли шорткод, который необходимо вывести. Это можно сделать с помощью функции shortcode_exists()
— Код №4:
1 2 3 4 5 6 |
## Проверка существует ли шорткод if ( shortcode_exists( 'gallery' ) ) { // Шоткод [gallery] зарегистрирован } |
Вывод информации из файла темы
Если нужно с помощью шорткода вывести какой-то html-код из файла в текущей теме, то можно воспользоваться Кодом №5:
1 2 3 4 5 6 7 8 9 |
function qfurs_func_1 ( $attr, $content = null ) { ob_start(); include_once 'my-file.php'; return ob_get_clean(); } add_shortcode ( 'qfurs_shortcode_1', 'qfurs_func_1' ); |
Буфиризация вывода
Если в шорткоде используется много HTML кода, то для удобства можно использовать функцию ob_start(), чтобы буферизировать вывод и затем его вернуть (Код №6):
1 2 3 4 5 6 7 8 9 |
function qfurs_func_1 ( $attr, $content = null ) { ob_start(); ?> <HTML> <div> ... <?php return ob_get_clean(); } add_shortcode ( 'qfurs_shortcode_1', 'qfurs_func_1' ); |