Получение данных ответа oEmbed для URL

Получение данных ответа 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. Это даст вам возможность интегриро��ать различные медиа-контенты на ваш сайт без лишних усилий!

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *