Cum să obții sursa unei imagini meta personalizate în WordPress

27 sept. 2012, 20:07:48
Vizualizări: 14.6K
Voturi: 0

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.

2
Comentarii

Ceea ce contează este ce stochezi în câmpul personalizat, nu cum îl obții. Este obișnuit să stochezi ID-ul pentru imagini, dar presupun că nu faci asta. Ce stochezi în câmpurile meta?

mrwweb mrwweb
28 sept. 2012 05:48:59

Nu ID-ul :), speram să nu fiu nevoit să fac asta manual. Am găsit câteva metode prin potrivirea câmpurilor $wpdb. Dar am găsit și o metodă mai bună care nu folosește deloc ID-urile. Dacă găsesc ceva timp, voi posta ce am descoperit.

Marc Wiest Marc Wiest
29 sept. 2012 20:45:29
Toate răspunsurile la întrebare 1
2

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

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;
27 sept. 2012 20:31:44
Comentarii

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.

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

'get_post_meta($post_id, '_cmb_portfolio_image_one', true);' returnează URL-ul complet al imaginii. Cum poți obține, de exemplu, URL-ul pentru dimensiunea 'medium'?

Ben Ben
14 nov. 2016 10:45:01