Cómo obtener la fuente de una imagen de metadatos personalizados

27 sept 2012, 20:07:48
Vistas: 14.6K
Votos: 0

Estoy trabajando en una plantilla de página para un CPT (tipo de publicación personalizado) y me gustaría obtener la fuente de una imagen de metadatos personalizados.

Para las imágenes destacadas (post_thumbnail) esto es bastante fácil usando wp_get_attachment_image_src(), pero si hago var_dump( $post->ID ) no veo un valor para la fuente de mi imagen adjunta en los metadatos personalizados.

¿Cómo puedo obtener el ID de mi imagen en metadatos personalizados para conseguir su fuente? Gracias :)

ACTUALIZACIÓN Esto es lo que tengo hasta ahora:

<?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 } ?>

Básicamente, me gustaría obtener el ID para mis imágenes en post_meta de manera similar al enfoque usado para la imagen destacada.

2
Comentarios

Lo importante es lo que almacenas en el campo personalizado, no cómo lo obtienes. Es común almacenar el ID para las imágenes, pero supongo que no estás haciendo eso. ¿Qué estás almacenando en los campos meta?

mrwweb mrwweb
28 sept 2012 05:48:59

No el ID :), esperaba no tener que hacerlo manualmente. Encontré un par de formas emparejando campos de $wpdb. Pero también encontré una mejor manera sin usar los IDs para nada. Si tengo tiempo, publicaré lo que descubrí.

Marc Wiest Marc Wiest
29 sept 2012 20:45:29
Todas las respuestas a la pregunta 1
2

¿Imagen Meta Personalizada? ¿Qué es eso?

¿Quieres decir que,

  • estás insertando una imagen en un campo personalizado (campo meta de la publicación) dentro de tu meta box?

  • estás insertando una imagen como un adjunto o miniatura de la publicación?

Estas son dos cosas muy diferentes, una de las cuales trata con,

add_post_meta

la otra,

wp_insert_attachment

Esta última inserta adjuntos en tu biblioteca de medios que está asociada con tu tabla de base de datos wp_posts.

Por otro lado, el meta de la publicación (es decir, add_post_meta etc.) está asociado con tu tabla de base de datos wp_postmeta.

Los adjuntos en realidad se clasifican como un post_type al igual que post o page o tu custom_post_type, por ejemplo.

Los adjuntos, como tipo de publicación, pueden o no estar asociados con el ID de una publicación, almacenado como un entero en la columna post_parent de tu base de datos wp_posts. Si está establecido en 0, significa que el adjunto no tiene padre y no está asociado con ninguna publicación en particular.

Dejando la teoría a un lado...

Puede que estés intentando acceder a un adjunto que simplemente no existe en primer lugar.

$attachment_id = 20; //ejemplo del ID del adjunto que quieres recuperar
$attachment = wp_get_attachment_image_src( $attachment_id );
echo $attachment[0];

El código anterior es útil para recuperar un adjunto que no está asociado con ninguna publicación en particular.

$post_id = 100; //ejemplo de ID de publicación
$attachment = wp_get_attachment_thumb_url( $post_id );
echo $attachment; //devuelve la URL de la imagen adjunta a la publicación

Mientras que para recuperar un valor, independientemente de cuál sea ese valor, cuando se trata de meta de publicaciones (como te referiste como imagen meta personalizada), se requiere el uso de,

get_post_meta

En uso,

$post_id = get_the_ID();
$meta = get_post_meta($post_id, 'your_meta_key');
echo $meta;

Referencias de la API

ACTUALIZACIÓN

Basado en tu código,

$portfolio_image_one = get_post_meta( $post->ID, '_cmb_portfolio_image_one', true );

El valor post_meta se guarda en tu variable,

$portfolio_image_one

Lo que necesitas hacer es,

echo $portfolio_image_one;

De lo contrario, no pasará nada.

Si hay un valor almacenado para el meta_key, es decir, _cmb_portfolio_image_one, entonces al mostrar el resultado de la variable, se te presentará tu meta_value, sea cual sea ese valor, como http://dominio.com/mi_imagen.jpg, por ejemplo.

Si $post->ID se usa fuera del bucle, tendrás problemas, por lo que debes referirte a mi ejemplo anterior, pero con tu código,

$post_id = get_the_ID();
$portfolio_image_one = get_post_meta($post_id, '_cmb_portfolio_image_one', true);
echo $portfolio_image_one;
27 sept 2012 20:31:44
Comentarios

Hola, gracias por la respuesta detallada, desafortunadamente no responde mi pregunta. Actualizaré mi publicación para mostrarte con qué estoy trabajando.

Marc Wiest Marc Wiest
27 sept 2012 21:28:46

'get_post_meta($post_id, '_cmb_portfolio_image_one', true);' está devolviendo la URL completa de la imagen. ¿Cómo obtendrías por ejemplo la URL del tamaño 'medium'?

Ben Ben
14 nov 2016 10:45:01