wp_embed_register_handler()
Регистрирует Embed обработчик. Это обработчик, который превращает ссылку в контенте в HTML код.
Подробнее про oEmbed в WordPress.
Эта функция рассчитана на создание обработчиков для ссылок (для сайтов) которые не поддерживают oEmbed формат. Т.е. если сайт поддерживает oEmbed формат, то для него нужно регистрировать провайдера, а не кастомный обработчик создаваемый этой функцией. oEmbed провайдер регистрируется через функцию wp_oembed_add_provider().
Хуков нет.
Возвращает
null
. Ничего.
Использование
wp_embed_register_handler( $id, $regex, $callback, $priority );
- $id(строка) (обязательный)
- Внутренний идентификатор (имя) обработчика. Должен быть уникальным.
- $regex(строка) (обязательный)
- Регулярное выражение, с которым сравнивается URL из контента. $matches передается $callback функцию.
- $callback(callable) (обязательный)
- Функция обратного вызова, которая будет вызываться при совпадении регулярного выражения.
- $priority(число)
- Используется для указания порядка, в котором будут проверяться зарегистрированные обработчики.
По умолчанию: 10
Примеры
#1 Встраивание gist в контент записи
Хотите, чтобы ссылка на gist превращалась сразу в код по принципу, как WordPress преобразует ссылку на youtube видео сразу в плеер? Ниже рассмотрим как такое сделать.
Пример ниже работает как в визуальном редакторе, так и в блочном.
Используйте следующий код, вставив в functions.php или оформив в виде плагина:
add_action( 'init', 'register_gist_oembed_provider' ); function register_gist_oembed_provider() { wp_embed_register_handler( 'gist', '~https://gist\.github\.com/[a-z0-9]+/[a-z0-9]+~im', 'callback_gist_oembed_provider' ); } function callback_gist_oembed_provider( $matches ) { return sprintf( '<script src="%s.js"></script>', $matches[0] ); }
Так как при таком решении мы не делаем никаких запросов на бэкенде, то и кеширование результата не реализовано.
#2 Обработчик встраивания для встраивания видео Forbes
wp_embed_register_handler( 'forbes', '~http://(?:www|video)\.forbes\.com/(?:video/embed/embed\.html|embedvideo/)\?show=(?P<show>[\d]+)&format=frame&height=(?P<height>[\d]+)&width=(?P<width>[\d]+)&video=(?P<video>.+?)($|&)~i', 'wpdocs_embed_handler_forbes' ); function wpdocs_embed_handler_forbes( $matches, $attr, $url, $rawattr ) { $src = add_query_arg( [ 'show' => (int) $matches['show'], 'format' => 'frame', 'width' => (int) $matches['height'], 'height' => (int) $matches['width'], 'video' => esc_attr( $matches['video'] ), 'mode' => 'render', ], 'http://www.forbes.com/video/embed/embed.html' ); $embed = strtr( '<iframe src="'. $src .'" width="{WIDTH}px" height="{HEIGHT}px" frameborder="0" scrolling="no" marginwidth="0" marginheight="0"></iframe>', [ '{HEIGHT}' => (int) $matches['height'], '{WIDTH}' => (int) $matches['width'], ] ); return $embed; }
Заметки
- Global. WP_Embed. $wp_embed WordPress Embed object.
Список изменений
С версии 2.9.0 | Введена. |
Код wp_embed_register_handler() wp embed register handler WP 6.7.2
function wp_embed_register_handler( $id, $regex, $callback, $priority = 10 ) { global $wp_embed; $wp_embed->register_handler( $id, $regex, $callback, $priority ); }