Получение данных ответа oEmbed для URL
Функция get_oembed_response_data_for_url()
позволяет получить данные ответа oEmbed для указанного URL.
Как это работает
Функция использует другую функцию url_to_postid()
для получения идентификатора поста по URL. Если URL относится к текущему сайту, то возвращается объект с данными oEmbed, иначе — false.
Возвращаемые значения
- Объект или false. Возвращает данные ответа oEmbed, если URL принадлежит текущему сайту. В противном случае — false.
Синтаксис использования
get_oembed_response_data_for_url( $url, $args );
- $url (строка, обязательный) — URL, который необходимо проверить.
- $args (массив, обязательный) — аргументы для получения удалённых данных oEmbed.
Примеры
Пример 1: Получение данных oEmbed
Предположим, что мы хотим получить данные для URL:
$url = 'https://example.com/5875/30-css-selektorov';
$data = get_oembed_response_data_for_url( $url, [ 'width' => 400 ] );
print_r( $data );
Результат
stdClass Object
(
[version] => 1.0
[provider_name] => WordPress как у вас на ладони
[provider_url] => https://example.com
[author_name] => Kama
[author_url] => https://example.com/author/kama
[title] => Селекторы в CSS
[type] => rich
[width] => 400
[height] => 225
=> Селекторы в CSS
[thumbnail_url] => https://example.com/wp-content/uploads/2015/06/selektory-css.png
[thumbnail_width] => 400
[thumbnail_height] => 376
)
В результате мы получаем объект с данными о посте, включая название, автора и HTML-код для встроенной версии поста.
Пример 2: Отключение встраивания для ссылок на текущий сайт
Иногда нужно отключить встраивание для ссылок, которые ведут на текущий сайт. Для этого можно использовать следующий код:
// Убираем фильтр oEmbed перед любыми HTTP запросами.
remove_filter( 'pre_oembed_result', 'wp_filter_pre_oembed_result', 10 );
Изменения
Функция была введена в версии 5.0.0.
Исходный код функции
Вот часть исходного кода функции, которая находит данные о посте:
function get_oembed_response_data_for_url( $url, $args ) {
$switched_blog = false;
if ( is_multisite() ) {
// Обрабатываем URL для мультисайта
$url_parts = wp_parse_args(
wp_parse_url( $url ),
array(
'host' => '',
'port' => null,
'path' => '/',
)
);
$qv = array(
'domain' => $url_parts['host'] . ( $url_parts['port'] ? ':' . $url_parts['port'] : '' ),
'path' => '/',
'update_site_meta_cache' => false,
);
// Создаем путь для подкаталогов
if ( ! is_subdomain_install() ) {
$path = explode( '/', ltrim( $url_parts['path'], '/' ) );
$path = reset( $path );
if ( $path ) {
$qv['path'] = get_network()->path . $path . '/';
}
}
$sites = get_sites( $qv );
$site = reset( $sites );
// Проверяем, разрешены ли встраивания
if ( ! empty( $site->deleted ) || ! empty( $site->spam ) || ! empty( $site->archived ) ) {
return false;
}
if ( $site && get_current_blog_id() !== (int) $site->blog_id ) {
switch_to_blog( $site->blog_id );
$switched_blog = true;
}
}
$post_id = url_to_postid( $url );
$post_id = apply_filters( 'oembed_request_post_id', $post_id, $url );
if ( ! $post_id ) {
if ( $switched_blog ) {
restore_current_blog();
}
return false;
}
$width = isset( $args['width'] ) ? $args['width'] : 0;
$data = get_oembed_response_data( $post_id, $width );
if ( $switched_blog ) {
restore_current_blog();
}
return $data ? (object) $data : false;
}
Функция обрабатывает запрос, получает данные и возвращает их в нужном формате.
Теперь вы знаете, как использовать get_oembed_response_data_for_url()
в своих проектах на WordPress. Это даст вам возможность интегриро��ать различные медиа-контенты на ваш сайт без лишних усилий!