Как кодом задать значение для meta tag og:image?

Ссылка скопирована
1 ответ

задача динамически менять картинку для соцсетей для определенной страницы. пока нужно сделать только запись картинки в тег meta. стоит плагин seo Yaost, и как бы код

WPSEO_Meta::set_value( 'opengraph-image', 'путь к картинке', $post_id );

WPSEO_Meta::set_value( 'opengraph-image', 'путь к картинке', $post_id );

записывает значение, притом код

WPSEO_Meta::get_value( 'opengraph-image', $post_id);

WPSEO_Meta::get_value( 'opengraph-image', $post_id);

это новое значение считывает, и в админке страницы появляется новая картинка, но вот на саму страницу уже при выводе новое значение не выводится. кеширования никакого на сайте нет.

как правильно сделать запись?

Дополнительно:

новая не выводится в <meta property="og:image" content="">
?

  • its2easyy, не выводится
  • vvvadimos, я бы проверил в фильтре wpseo_opengraph_image что туда попадает (https://developer.yoast.com/customization/apis/met...) и если не то, то уже раскапывать откуда оно туда берёт значение. Ну или менять прямо в фильтре, но тогда это будет замена на ходу, вместо замены значения в БД
  • its2easyy, короче нужно было прописывать еще и id изображения
    WPSEO_Meta::set_value( 'opengraph-image-id', (string) $attachment_id, $post_id );

    WPSEO_Meta::set_value( 'opengraph-image-id', (string) $attachment_id, $post_id );

    и тогда все работает

  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Дмитрий К. Ответ

    Если на сайте стоит Yoast SEO, задавать og:image лучше не прямой записью meta через WPSEO_Meta::set_value(), а через фильтры Yoast. Тогда картинка будет подставляться при выводе страницы и не нужно вручную сохранять мета-поле для каждой записи.

    Фильтр для Open Graph image:

    add_filter('wpseo_opengraph_image', function ($image) {
        if (is_singular('post')) {
            $custom = get_post_meta(get_the_ID(), '_custom_og_image', true);
     
            if ($custom) {
                return esc_url($custom);
            }
        }
     
        return $image;
    });

    add_filter('wpseo_opengraph_image', function ($image) { if (is_singular('post')) { $custom = get_post_meta(get_the_ID(), '_custom_og_image', true); if ($custom) { return esc_url($custom); } } return $image; });

    Если нужно задать картинку только для конкретной страницы:

    add_filter('wpseo_opengraph_image', function ($image) {
        if (is_page(123)) {
            return 'https://site.ru/wp-content/uploads/og/page-123.jpg';
        }
     
        return $image;
    });

    add_filter('wpseo_opengraph_image', function ($image) { if (is_page(123)) { return 'https://site.ru/wp-content/uploads/og/page-123.jpg'; } return $image; });

    Также можно управлять Twitter image:

    add_filter('wpseo_twitter_image', function ($image) {
        if (is_page(123)) {
            return 'https://site.ru/wp-content/uploads/og/page-123.jpg';
        }
     
        return $image;
    });

    add_filter('wpseo_twitter_image', function ($image) { if (is_page(123)) { return 'https://site.ru/wp-content/uploads/og/page-123.jpg'; } return $image; });

    Если вы всё-таки записываете значение в Yoast meta, проверьте точное имя поля и очистите indexables Yoast, иначе фронт может брать старые данные из таблиц Yoast. Поэтому фильтр часто надёжнее для динамических случаев.

    Важно: картинка должна быть доступна по абсолютному URL, без авторизации, с нормальным размером. Для соцсетей обычно используют 1200x630. После изменения проверяйте через Facebook Sharing Debugger, VK/Telegram preview и очистку кэша сайта.

    Итог: для динамического og:image используйте wpseo_opengraph_image. Это чище, чем пытаться вручную записывать внутренние meta Yoast.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

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

    Вам также может быть интересно