Функция wp_embed_register_handler()
в WordPress предназначена для регистрации обработчиков, которые могут преобразовывать ссылки в контенте в HTML-код. Обычно используется для сайтов, которые не поддерживают oEmbed, чтобы создать кастомный обработчик для встраивания контента.
wp_embed_register_handler( string $id, string $regex, callable $callback, int $priority = 10 );
Параметры функции
- $id (string) — Уникальный внутренний идентификатор для обработчика. Это название будет использовано для обращения к обработчику.
- $regex (string) — Регулярное выражение, которое используется для проверки, подходит ли данный обработчик для указанного URL.
- $callback (callable) — Функция обратного вызова, которая выполняется, если регулярное выражение совпадает с URL.
- $priority (int) — Порядок выполнения обработчиков, если их несколько. По умолчанию равно 10.
Возвращаемое значение
Функция не возвращает значения (null).
Описание работы
wp_embed_register_handler()
позволяет зарегистрировать кастомный обработчик для встраивания контента по ссылке. Это удобно для сайтов, которые не поддерживают oEmbed по умолчанию. Регулярное выражение анализирует URL, а функция обратного вызова возвращает HTML-код, который будет вставлен вместо ссылки.
Пример 1: Встраивание Gist
Этот пример показывает, как зарегистрировать обработчик, который будет преобразовывать ссылку на Gist (GitHub) в интерактивный код.
add_action( 'init', 'register_gist_embed_handler' );
function register_gist_embed_handler() {
wp_embed_register_handler(
'gist',
'~https://gist\.github\.com/[a-zA-Z0-9]+/[a-zA-Z0-9]+~i',
'callback_gist_embed_handler'
);
}
function callback_gist_embed_handler( $matches, $attr, $url, $rawattr ) {
// Генерация HTML для Gist
return sprintf( '<script src="%s.js"></script>', esc_url( $matches[0] ) );
}
Этот код нужно добавить в файл functions.php
вашей темы или в собственный плагин. При обнаружении ссылки на Gist, она будет автоматически преобразована в скрипт для встраивания кода.
Пример 2: Обработчик для встраивания Forbes видео
Этот пример создает обработчик для встраивания видео с сайта Forbes.
wp_embed_register_handler(
'forbes_video',
'#http://(?:www|video)\.forbes\.com/(?:video/embed/embed\.html|embedvideo/)\?show=([\d]+)&format=frame&height=([\d]+)&width=([\d]+)&video=(.+?)($|&)#i',
'embed_handler_forbes_video'
);
function embed_handler_forbes_video( $matches, $attr, $url, $rawattr ) {
$embed = sprintf(
'<iframe src="http://www.forbes.com/video/embed/embed.html?show=%1$s&format=frame&height=%2$s&width=%3$s&video=%4$s&mode=render" width="%3$spx" height="%2$spx" frameborder="0" scrolling="no" marginwidth="0" marginheight="0"></iframe>',
esc_attr( $matches[1] ),
esc_attr( $matches[2] ),
esc_attr( $matches[3] ),
esc_attr( $matches[4] )
);
return $embed;
}
Регулярное выражение проверяет URL на наличие параметров видео с сайта Forbes и преобразует его в HTML-код для встраивания.
Пример 3: Встраивание кастомных аудио-сервисов
Данный пример демонстрирует, как создать обработчики для встраивания аудио с таких сайтов, как Vocaroo и Sodaphonic.
add_action( 'init', 'register_custom_audio_embeds' );
function register_custom_audio_embeds() {
// Обработчик для Vocaroo
wp_embed_register_handler(
'vocaroo_audio',
'#^https?://(vocaroo.com|voca.ro)/([a-zA-Z0-9]+)$#i',
'handler_vocaroo_audio'
);
// Обработчик для Sodaphonic
wp_embed_register_handler(
'sodaphonic_audio',
'#^https?://sodaphonic.com/audio/([a-zA-Z0-9]+)(.*)$#i',
'handler_sodaphonic_audio'
);
}
function handler_vocaroo_audio( $matches, $attr, $url, $rawattr ) {
$embed = sprintf(
'<iframe src="https://vocaroo.com/embed/%1$s" width="300" height="60" frameborder="0"></iframe>',
esc_attr( $matches[2] )
);
return $embed;
}
function handler_sodaphonic_audio( $matches, $attr, $url, $rawattr ) {
$embed = sprintf(
'<iframe src="https://sodaphonic.com/embed/%1$s" width="400" height="100" frameborder="0"></iframe>',
esc_attr( $matches[1] )
);
return $embed;
}
Этот код регистрирует два обработчика: для сервиса Vocaroo и для Sodaphonic. Каждый из них преобразует ссылку на аудиофайл в соответствующий iframe для встраивания.
Заключение
Функция wp_embed_register_handler()
— это гибкий инструмент для регистрации собственных обработчиков встраивания контента в WordPress. Она полезна в тех случаях, когда нужно работать с сайтами, которые не поддерживают oEmbed. Создание кастомных обработчиков позволяет легко встраивать разнообразный контент прямо в посты или страницы, используя регулярные выражения для анализа URL и функции обратного вызова для генерации HTML.