Cum să obții sursa unei imagini meta personalizate în WordPress
Lucrez la un șablon de pagină pentru un CPT (custom post type) și aș dori să obțin sursa unei imagini din meta personalizată.
Pentru post_thumbnail-uri, acest lucru este destul de simplu folosind wp_get_attachment_image_src()
, dar dacă folosesc var_dump( $post->ID )
nu văd o valoare pentru sursa imaginii din meta personalizată.
Deci, cum pot obține ID-ul imaginii din meta personalizată pentru a-i obține sursa? Mulțumesc :)
UPDATE Iată ce am reușit să fac până acum.
<?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 } ?>
În esență, aș dori să obțin ID-ul pentru imaginile din post_meta într-un mod similar cu abordarea pentru thumbnail-uri.

Ce este o Imagine Meta Personalizată?
Te referi la faptul că,
inserezi o imagine într-un câmp personalizat (câmp meta pentru postare) în interiorul cutiei tale meta?
inserezi o imagine ca atașament sau thumbnail pentru postare?
Acestea sunt două lucruri foarte diferite, dintre care una se ocupă cu,
add_post_meta
iar cealaltă,
wp_insert_attachment
Ultima dintre ele inserează atașamente în biblioteca ta media, care este asociată cu tabelul tău de baze de date wp_posts
.
Pe de altă parte, meta postării (adică add_post_meta
etc.) este asociată cu tabelul tău de baze de date wp_postmeta'
.
Atașamentele sunt de fapt clasificate ca un post_type
, la fel ca post
sau page
sau custom_post_type
, de exemplu.
Atașamentele, ca tip de postare, pot sau nu să fie asociate cu ID-ul unei Postări, stocate ca întreg în coloana post_parent
din tabelul tău wp_posts
. Dacă este setat la 0
, aceasta înseamnă că atașamentul nu are părinte și nu este asociat cu nicio postare anume.
Lăsând teoria la o parte...
Este posibil să încerci să accesezi un atașament care pur și simplu nu există.
$attachment_id = 20; //exemplu de ID al atașamentului pe care vrei să-l obții
$attachment = wp_get_attachment_image_src( $attachment_id );
echo $attachment[0];
Codul de mai sus este util pentru a obține un atașament care nu este asociat cu nicio postare anume.
$post_id = 100; //exemplu de ID de postare
$attachment = wp_get_attachment_thumb_url( $post_id );
echo $attachment; //returnează URL-ul imaginii atașate postării
În schimb, obținerea unei valori, indiferent care este acea valoare, când ai de-a face cu meta postării (așa cum ai menționat ca imagine meta personalizată) necesită folosirea,
get_post_meta
În utilizare,
$post_id = get_the_ID();
$meta = get_post_meta($post_id, 'your_meta_key');
echo $meta;
Referințe 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
ACTUALIZARE
Bazat pe codul tău,
$portfolio_image_one = get_post_meta( $post->ID, '_cmb_portfolio_image_one', true );
Valoarea post_meta este stocată în variabila ta,
$portfolio_image_one
Ce trebuie să faci este,
echo $portfolio_image_one;
Altfel nu se va întâmpla nimic.
Dacă există o valoare stocată pentru meta_key
, adică _cmb_portfolio_image_one
, atunci prin afișarea rezultatului variabilei, vei fi prezentat cu meta_value
, oricare ar fi acea valoare, cum ar fi http://domain.com/my_image.jpg
, de exemplu.
Dacă $post->ID este folosit în afara buclei, vei avea probleme, de aceea referă-te la exemplul meu anterior, dar cu codul tău,
$post_id = get_the_ID();
$portfolio_image_one = get_post_meta($post_id, '_cmb_portfolio_image_one', true);
echo $portfolio_image_one;

Hei, mulțumesc pentru răspunsul detaliat, dar din păcate nu răspunde la întrebarea mea. Voi actualiza postarea pentru a-ți arăta cu ce lucrez.
