WordPress как на ладони
wordpress jino

oembed_dataparse хук-фильтр . WP 2.9.0

Позволяет изменить контент (HTML) создаваемый при встраивании URL, поддерживаемых oEmbed форматом WordPress.

oEmbed контент - это видео, аудио, HTML и другие коды на вашем сайте созданные по указанной ссылке на другой сайт, например, ссылка на youtube превратиться в HTML код для встраивания видео (iframe).

oEmbed — открытый формат, созданный с целью упрощения внедрения содержимого одной веб-страницы в другую. В роли контента может выступать фотографии, видеоролики, ссылки или другие типы данных.

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

add_filter( 'oembed_dataparse', 'filter_function_name_1035', 10, 3 );
function filter_function_name_1035( $return, $data, $url ){
	// filter...

	return $return;
}
$return(cтрока)
oEmbed HTML код.
$data(объект)
Объект oEmbed.
$url(cтрока)
Ссылка, откуда нужно получить embed контент.

Содержимое переменных

Допустим, мы вставили в контент ссылку на YouTube ролик:

https://www.youtube.com/watch?v=RNFRCz0whuw

Теперь, WordPress при отображении контента записи сделает такой http запрос:

https://www.youtube.com/oembed
?maxwidth=840
&maxheight=1000
&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DRNFRCz0whuw
&dnt=1
&format=json

Теперь, ответ на запрос можно будет отфильтровать. Фильтр получит такие параметры:

$return

<iframe width="200" height="113" src="https://www.youtube.com/embed/RNFRCz0whuw?feature=oembed" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>

$data

stdClass Object(
	[html]             => <iframe width="200" height="113" src="https://www.youtube.com/embed/RNFRCz0whuw?feature=oembed" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>
	[thumbnail_height] => 360
	[author_url]       => https://www.youtube.com/channel/UC4mPz031whiFiY5ZSuXoYGg
	[provider_name]    => YouTube
	[provider_url]     => https://www.youtube.com/
	[thumbnail_url]    => https://i.ytimg.com/vi/RNFRCz0whuw/hqdefault.jpg
	[author_name]      => wp-plus
	[type]             => video
	[thumbnail_width]  => 480
	[width]            => 200
	[version]          => 1.0
	[height]           => 113
	[title]            => Как создать шаблон страницы WordPress, записи или другого типа поста - уроки и разработка WP
)

$url

https://www.youtube.com/watch?v=RNFRCz0whuw

Оembed запросы кешируются на 1 день (86400 секунд) и их результаты хранятся в базе данных как метаинформация (скриншот на основе 1 примера):

За создание метаданных отвечает метод WP_Embed::shortcode().

Примеры

#1 Адаптивный (резиновый) плеер YouTube

Часто можно видеть, как плеер YouTube пытаются сделать адаптивным с помощью JavaScript, но это лучше делать на чистом CSS. Соотношение сторон (пропорции) плеера будут соблюдены.

Добавляем обёртку для плеера YouTube, например в functions.php темы:

add_filter( 'oembed_dataparse', function ( $return, $data ) {
	if ( 'YouTube' === $data->provider_name )
		$return = "<div class='youtube-container'>{$return}</div>";

	return $return;
}, 10, 2 );

Теперь добавляем стили, например в style.css темы:

.youtube-container  {
	position:relative;
	padding-bottom:56.25%;
	padding-top:30px;
	height:0;
	overflow:hidden;
}

.youtube-container  iframe, 
.youtube-container  object, 
.youtube-container  embed {
	position:absolute;
	top:0;
	left:0;
	width:100%;
	height:100%;
}

Где используется хук

Код хука-фильтра oembed_dataparse

Фрагмент из: wp-includes/class-oembed.php VER 4.9.4
...
			default:
				$return = false;
		}

		/**
		 * Filters the returned oEmbed HTML.
		 *
		 * Use this filter to add support for custom data types, or to filter the result.
		 *
		 * @since 2.9.0
		 *
		 * @param string $return The returned oEmbed HTML.
		 * @param object $data   A data object result from an oEmbed provider.
		 * @param string $url    The URL of the content to be embedded.
		 */
		return apply_filters( 'oembed_dataparse', $return, $data, $url );
	}

	/**
	 * Strips any new lines from the HTML.
	 *
	 * @since 2.9.0 as strip_scribd_newlines()
	 * @since 3.0.0
	 *
	 * @param string $html Existing HTML.
	 * @param object $data Data object from WP_oEmbed::data2html()
	 * @param string $url The original URL passed to oEmbed.
	 * @return string Possibly modified $html
	 */
	public function _strip_newlines( $html, $data, $url ) {
		if ( false === strpos( $html, "\n" ) ) {
...
campusboy 2657youtube.com/c/wpplus
Активный пользователь wp-kama.ru. WordPress-разработчик. Разработка сайтов и лендингов. Доработка существующих проектов. Сопровождение ресурсов.
Редакторы: Kama 5064

    Здравствуйте, !

    Ваш комментарий
    Предпросмотр