Как получить источник изображения из произвольного метаполя в WordPress?
Я работаю над шаблоном страницы CPT (произвольного типа записи) и хочу получить источник изображения из произвольного метаполя.
Для миниатюр записи это довольно просто с использованием wp_get_attachment_image_src()
, но если я использую var_dump( $post->ID )
, я не вижу значения для моего изображения из произвольного метаполя.
Итак, как я могу получить ID изображения из произвольного метаполя, чтобы получить его источник? Спасибо :)
ОБНОВЛЕНИЕ Вот что у меня получилось.
<?php $portfolio_image_one = get_post_meta( $post->ID, '_cmb_portfolio_image_one', true ); ?>
<?php $portfolio_image_two = get_post_meta( $post->ID, '_cmb_portfolio_image_two', true ); ?>
<?php $portfolio_image_three = get_post_meta( $post->ID, '_cmb_portfolio_image_three', true ); ?>
<?php if ( has_post_thumbnail() ) {
$large_image_url = wp_get_attachment_image_src( get_post_thumbnail_id(), 'large'); ?>
<a class="featured-image" href="<?php echo $large_image_url[0] ?>" title="' . <?php the_title_attribute('echo=0') ?> . '">
<?php the_post_thumbnail('medium', array('class' => 'img-polaroid')); ?>
</a>
<?php } ?>
По сути, я хочу получить ID для изображений из метаполей аналогично тому, как это делается для миниатюры записи.
Пользовательское мета-изображение? Что это?
Вы имеете в виду, что:
вы добавляете изображение в пользовательское поле (поле метаданных записи) внутри вашего метабокса?
вы добавляете изображение как вложение или миниатюру записи?
Это две совершенно разные вещи, одна из которых работает с:
add_post_meta
а другая с:
wp_insert_attachment
Последняя добавляет вложения в вашу медиатеку, которая связана с таблицей базы данных wp_posts
.
Метаданные записи, с другой стороны (например, add_post_meta
и т.д.), связаны с таблицей базы данных wp_postmeta
.
Вложения фактически классифицируются как post_type
, так же как post
, page
или ваш custom_post_type
, например.
Вложения, как тип записи, могут быть или не быть связаны с ID записи, хранящимся как целое число в столбце post_parent
вашей таблицы wp_posts
. Если установлено значение 0
, это означает, что вложение не имеет родителя и не связано ни с какой конкретной записью.
Оставим теорию в стороне...
Возможно, вы пытаетесь получить доступ к вложению, которого просто не существует.
$attachment_id = 20; //пример ID вложения, которое вы хотите получить
$attachment = wp_get_attachment_image_src($attachment_id);
echo $attachment[0];
Приведенный выше код полезен для получения вложения, не связанного ни с какой конкретной записью.
$post_id = 100; //пример ID записи
$attachment = wp_get_attachment_thumb_url($post_id);
echo $attachment; //возвращает URL изображения, прикрепленного к записи
В то время как получение значения, независимо от того, что это за значение, при работе с метаданными записи (как вы назвали это пользовательским мета-изображением), требует использования:
get_post_meta
В использовании:
$post_id = get_the_ID();
$meta = get_post_meta($post_id, 'your_meta_key');
echo $meta;
Ссылки на API
- WordPress API: add_post_meta
- WordPress API: wp_get_attachment_image_src
- WordPress API: wp_get_attachment_thumb_url
- WordPress API: wp_insert_attachment
- WordPress API: get_post_meta
ОБНОВЛЕНИЕ
На основе вашего кода:
$portfolio_image_one = get_post_meta($post->ID, '_cmb_portfolio_image_one', true);
Значение post_meta хранится в вашей переменной:
$portfolio_image_one
Что вам нужно сделать:
echo $portfolio_image_one;
Иначе ничего не произойдет.
Если для meta_key
, т.е. _cmb_portfolio_image_one
, хранится значение, то при выводе результата переменной вы получите ваш meta_value
, каким бы он ни был, например, http://domain.com/my_image.jpg
.
Если $post->ID используется вне цикла, у вас возникнут проблемы, поэтому обратитесь к моему предыдущему примеру, но с вашим кодом:
$post_id = get_the_ID();
$portfolio_image_one = get_post_meta($post_id, '_cmb_portfolio_image_one', true);
echo $portfolio_image_one;

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