Как получить источник изображения из произвольного метаполя в WordPress?

27 сент. 2012 г., 20:07:48
Просмотры: 14.6K
Голосов: 0

Я работаю над шаблоном страницы 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 для изображений из метаполей аналогично тому, как это делается для миниатюры записи.

2
Комментарии

Важно то, что вы храните в произвольном поле, а не то, как вы его получаете. Обычно хранят ID для изображений, но я предполагаю, что вы так не делаете. Что именно вы храните в метаполях?

mrwweb mrwweb
28 сент. 2012 г. 05:48:59

Не ID :) Я надеялся избежать ручного выполнения этой операции. Нашел пару способов через сопоставление полей $wpdb. Но также обнаружил более удобный способ вообще без использования ID. Если будет время, позже поделюсь найденным решением.

Marc Wiest Marc Wiest
29 сент. 2012 г. 20:45:29
Все ответы на вопрос 1
2

Пользовательское мета-изображение? Что это?

Вы имеете в виду, что:

  • вы добавляете изображение в пользовательское поле (поле метаданных записи) внутри вашего метабокса?

  • вы добавляете изображение как вложение или миниатюру записи?

Это две совершенно разные вещи, одна из которых работает с:

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

ОБНОВЛЕНИЕ

На основе вашего кода:

$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;
27 сент. 2012 г. 20:31:44
Комментарии

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

Marc Wiest Marc Wiest
27 сент. 2012 г. 21:28:46

'get_post_meta($post_id, '_cmb_portfolio_image_one', true);' возвращает полный URL изображения. Как можно получить URL для размера 'medium', например?

Ben Ben
14 нояб. 2016 г. 10:45:01