Установить og:image программно в отдельном пользовательском посте с внешними изображениями

Вопрос или проблема

Я создал плагин с пользовательским типом записи, и шаблон одиночной записи подтягивает фотографии с внешнего сайта. Я бы хотел программно установить источник для одного из этих изображений в качестве метаданных og:image в заголовке страницы. В данный момент он по умолчанию использует стандартное изображение сайта.

Галерея изображений извлекается с помощью ajax-запроса из шаблона одиночной записи. Я бы хотел установить значение мета-тега на основе первого возвращенного изображения.

Шаблон одиночной записи вызывает get_header(), поэтому заголовок уже построен до того, как галерея будет возвращена. Значит, мне нужно средство для замены или переопределения этой одной записи в заголовке. Все остальное в заголовке настроено так, как мне нужно, но это все основано на статических данных, установленных во время создания/редактирования записи.

Я даже не уверен, возможно ли то, что я пытаюсь достичь, но был бы чрезвычайно благодарен, если бы у кого-то были полезные идеи.

Вы сможете добиться того, о чем говорите, но это не будет работать надежно.

Другими словами, вы сможете заменить тег в заголовке одним из ваших изображений. Но к тому моменту большинство сканеров (сканеры социальных сетей и любые другие, интересующиеся тегами og:) уже пришли и ушли.

Поэтому вам нужно заменить его до того, как эти теги будут записаны. Хорошая новость в том, что вы можете это сделать! Вам просто нужно сделать это с помощью PHP, а не AJAX. Плохая новость в том, что это может быстро усложниться.

Таким образом, до того, как WordPress записал раздел, вам нужно уже загрузить URL вашего первого изображения с помощью PHP и сообщить WordPress, что вы хотите добавить что-то туда — ваш og: мета-тег. Все, что вы загружали с AJAX (список URL изображений, отфильтрованных по какому-то параметру?), вам нужно будет воссоздать с помощью PHP — только то, что вам нужно для получения URL первого изображения. Затем вы записываете его в заголовок.

Например, если предположить, что удаленный источник, возвращающий массив JSON изображений, может выглядеть так:

function so325454_add_meta_tag(){

    $images = file_get_contents('...');
    if ( !$images ){ return; } //в случае ошибки чтения файла

    $list_of_images = @json_decode( $images );
    if ( is_null( $list_of_images ) 
    || !is_array( $list_of_images ) 
    || count( $list_of_images ) < 1 ){ return; } //нет содержимого или плохой JSON или пустой массив

    $image = $list_of_images[0]; 
    echo "<meta property='og:image' content="$image" />";
}
add_action( 'wp_head', 'so325454_add_meta_tag' );

К сожалению, вам, возможно, придется быть осторожным с другими плагинами, записывающими og теги, даже те же самые og теги. Иными словами, запись вашего тега там не останавливает никаких других.

Ответ или решение

Чтобы программно установить og:image для вашей кастомной записи, учитывая использование внешних изображений, необходимо решить несколько технических задач. Ваша проблема связана с тем, что изображения подгружаются через AJAX после формирования шапки сайта, что затрудняет интеграцию динамически полученного изображения в метатеги. Рассмотрим, как это можно сделать корректно и эффективно.

Теория

Основная задача заключается в том, чтобы загрузить URL изображения до того, как заголовок страницы будет окончательно сформирован и отправлен на клиентскую сторону. WordPress, создавая заголовок, полагается на действие wp_head, в которое вы можете встроиться для добавления нужных метаданных.

Однако загрузка изображений через AJAX на этом этапе может быть слишком поздней, так как к этому времени большинство сканеров (например, социальных сетей) уже обработают метатеги страницы, и ваше изображение согласно og:image может не попасть в их кэш.

Пример

Ниже приведен пример PHP-кода, который интегрирует получение изображений и установку og:image:

function customize_og_image_meta_tag() {
    // Получаем JSON-данные от внешнего источника
    $images_json = file_get_contents('URL_ВАШЕГО_ИСТОЧНИКА');
    if (!$images_json) {
        return; // Покидаем функцию, если данные не загружены
    }

    // Парсинг JSON в массив
    $images_list = json_decode($images_json, true);
    if (is_null($images_list) || !is_array($images_list) || count($images_list) < 1) {
        return; // Если парсинг не удался
    }

    // Первое изображение используется для `og:image`
    $image_url = $images_list[0];
    echo "<meta property='og:image' content='$image_url' />";
}

// Добавляем функцию в действие `wp_head`
add_action('wp_head', 'customize_og_image_meta_tag');

Применение

  1. Поиск Источника: Определите и протестируйте URL вашего внешнего источника, который возвращает изображение в формате JSON. Убедитесь, что данные корректны и содержат необходимые изображения.

  2. Оптимизация: Постарайтесь оптимизировать загрузку данных, например, путем кэширования, чтобы снизить нагрузку на серверы и увеличить скорость загрузки.

  3. Проверка на Совместимость: Убедитесь, что другие плагины, которые могут добавлять метатеги og, не конфликтуют с вашим кодом. Возможно, потребуется кастомизировать ваши фильтры и приоритеты в хука wp_head для уверенности в том, что ваш метатег будет использоваться.

Такие меры позволят вам надежно установить динамический контент в og:image, обеспечивая корректную работу социального обмена и улучшая восприятие вашего контента пользователями социальных сетей.

Оцените материал
Добавить комментарий

Капча загружается...