Как получить полный абсолютный URL для прикрепления вложений?

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

На одной странице страницы я задал ее следующим образом:

 <?php $thumbnailSrc = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'medium'); $image = esc_attr($thumbnailSrc[0]); ?> <meta property="og:image" content="<?php echo $image ?>"> 

В результате получается следующее:

 <meta property="og:image" content="/wp-content/uploads/image.jpg"> 

В отладчике Open Graph я получаю следующую ошибку:

 Object at URL 'http://website.com' of type 'article' is invalid because the given value '/wp-content/uploads/image.jpg' for property 'og:image:url' could not be parsed as type 'url'. 

Как я могу получить вложение, чтобы URL-адрес: http://website.com/wp-content/uploads/image.jpg ?

Solutions Collecting From Web of "Как получить полный абсолютный URL для прикрепления вложений?"

esc_attr() может не понадобиться на url wp_get_attachment_image_src полученном wp_get_attachment_image_src .

Я упомянул пример кода на странице WordPress Codex на wp_get_attachment_image_src и адаптировал следующий код, который работает для меня.

 global $post; $thumbnailSrc = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID), 'medium'); if ( $thumbnailSrc ) : echo '<meta property="og:image" content="'.$thumbnailSrc[0].'">'; endif; 

Изменить. Поскольку вы используете объект $ post за пределами цикла WordPress, вам нужно объявить global $post; перед использованием $post->ID . Я добавил его в пример кода выше.

Вы можете использовать has_post_thumbnail () и get_the_post_thumbnail_url (), чтобы получить абсолютный URL-адрес для изображения функций сообщений.

В соответствии с Codex has_post_thumbnail() будет проверяться, имеет ли сообщение прикрепленное изображение, а get_the_post_thumbnail_url() вернет URL-адрес миниатюры сообщений.

Я проверил код ниже:

 global $post; if ( has_post_thumbnail($post->ID) ) { echo '<meta property="og:image" content="'.get_the_post_thumbnail_url($post->ID).'">'; } 

Как уже упоминалось в предыдущем комментарии, вы используете объект $ post до начала цикла WordPress и должны объявлять global $post; прежде чем вы сможете использовать $post->ID .

Чтобы получить доступ к текущему объекту post вне цикла , вам нужно объявить переменную $post глобально.

 <?php global $post; ?> <meta property="og:image" content="<?php echo wp_get_attachment_url(get_post_thumbnail_id(($post->ID)); ?>">