wp_embed_register_handler()WP 2.9.0

Регистрирует Embed обработчик. Это обработчик, который превращает ссылку в контенте в HTML код.

Подробнее про oEmbed в WordPress.

Эта функция рассчитана на создание обработчиков для ссылок (для сайтов) которые не поддерживают oEmbed формат. Т.е. если сайт поддерживает oEmbed формат, то для него нужно регистрировать провайдера, а не кастомный обработчик создаваемый этой функцией. oEmbed провайдер регистрируется через функцию wp_oembed_add_provider().

Работает на основе: WP_Embed::register_handler()

Хуков нет.

Возвращает

null. Ничего.

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

wp_embed_register_handler( $id, $regex, $callback, $priority );
$id(строка) (обязательный)
Внутренний идентификатор (имя) обработчика. Должен быть уникальным.
$regex(строка) (обязательный)
Регулярное выражение, с которым сравнивается URL из контента. $matches передается $callback функцию.
$callback(callable) (обязательный)
Функция обратного вызова, которая будет вызываться при совпадении регулярного выражения.
$priority(число)
Используется для указания порядка, в котором будут проверяться зарегистрированные обработчики.
По умолчанию: 10

Примеры

0

#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] );
}

Так как при таком решении мы не делаем никаких запросов на бэкенде, то и кеширование результата не реализовано.

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

Список изменений

С версии 2.9.0 Введена.

Код wp_embed_register_handler() WP 6.1.1

function wp_embed_register_handler( $id, $regex, $callback, $priority = 10 ) {
	global $wp_embed;
	$wp_embed->register_handler( $id, $regex, $callback, $priority );
}