Cum să afișezi descrierea imaginii în evidență doar dacă există?

28 aug. 2013, 12:01:43
Vizualizări: 25.3K
Voturi: 4

Folosesc această funcție în functions.php pentru a afișa descrierea imaginilor principale:

function the_post_thumbnail_caption() {
global $post;

$thumbnail_id    = get_post_thumbnail_id($post->ID);
$thumbnail_image = get_posts(array('p' => $thumbnail_id, 'post_type' => 'attachment'));

if ($thumbnail_image && isset($thumbnail_image[0])) {
echo '<div class="front-caption">'.$thumbnail_image[0]->post_excerpt.'</div>';
}
} 

Și folosesc acest cod în fișierul șablon pentru a afișa descrierea:

<?php 
if (the_post_thumbnail_caption()) { 
 the_post_thumbnail_caption(); 
}
?>

În fișierul functions am descrierea afișată într-un div cu class="front-caption" pe care îl stilizez cu borduri. Dacă descrierea nu există, tot afișează div-ul gol cu bordură.

Dacă nu există nicio descriere, nu vreau să afișeze div-ul cu bordură. Vreau să nu afișeze nimic.

Cum pot scrie codul corect pentru a funcționa? Mulțumesc anticipat.

2
Comentarii

Vă rugăm (A) Nu postați răspunsuri ca comentarii -> Adăugați un răspuns la propria întrebare. (B) Vă rugăm să reformulați întrebarea. Aveți multe greșeli de tipar.

kaiser kaiser
28 aug. 2013 12:21:47

Există acum un plugin care creează o funcție pentru obținerea descrierii sau a oricărui alt câmp din thumbnail: http://wordpress.org/plugins/thumbnail-field/

User User
25 mai 2014 18:13:42
Toate răspunsurile la întrebare 4
3

Sunt "puțin întârziat" dar această soluție a funcționat excelent pentru mine. Va afișa div-ul doar dacă descrierea nu este goală.

<?php
$get_description = get_post(get_post_thumbnail_id())->post_excerpt;
the_post_thumbnail();
  if(!empty($get_description)){//Dacă descrierea nu este goală, afișează div-ul
  echo '<div class="featured_caption">' . $get_description . '</div>';
  }
?>
26 oct. 2013 22:23:51
Comentarii

Mulțumesc Dejo, sunt 100% sigur, dar cred că asta am obținut în final.

Paul Coppock Paul Coppock
27 oct. 2013 21:47:23

Vot negativ. Foarte bun dar nu funcționează în WP_Query pentru o buclă personalizată într-un șablon de pagină.

Brad Dalton Brad Dalton
4 apr. 2018 18:07:34

Vot pozitiv pentru a contracara @Dev pentru că, ei bine, trebuie să știi cum funcționează buclele ca să faci codul să funcționeze în situația ta specifică, prietene. În plus, cei care votează negativ sunt hateri și domnișoara Swift nu acceptă așa ceva.

Nathan Nathan
30 iul. 2020 00:17:14
0

Vă rugăm să rețineți că începând cu WordPress 4.6, funcția a fost adăugată în nucleu (/wp-includes/post-thumbnail-template.php).

Utilizarea codului postat anterior aici va genera eroarea:

Eroare fatală: Cannot redeclare the_post_thumbnail_caption()

Pentru a evita acest lucru, vă rugăm să denumiți funcția altfel sau, dacă dezvoltați pentru versiuni mai vechi de WordPress într-o temă, adăugați o verificare astfel:

if ( ! function_exists( 'the_post_thumbnail_caption' ) ) {
 function the_post_thumbnail_caption() {
  global $post;

  $thumbnail_id    = get_post_thumbnail_id($post->ID);
  $thumbnail_image = get_posts(array('p' => $thumbnail_id, 'post_type' => 'attachment'));

   if ($thumbnail_image && isset($thumbnail_image[0])) {
    return '<div class="front-caption">'.$thumbnail_image[0]->post_excerpt.'</div>';
   } else {
     return;
   }
 }
}
17 aug. 2016 13:48:12
1

Puteți încerca acest lucru:

function the_post_thumbnail_caption() {
 global $post;

 $thumbnail_id    = get_post_thumbnail_id($post->ID);
 $thumbnail_image = get_posts(array('p' => $thumbnail_id, 'post_type' => 'attachment'));

  if ($thumbnail_image && isset($thumbnail_image[0])) {
   return '<div class="front-caption">'.$thumbnail_image[0]->post_excerpt.'</div>';
  } else {
    return;
  }
} 

și apoi:

echo the_post_thumbnail_caption(); 
28 aug. 2013 12:12:33
Comentarii

Acest lucru funcționează excelent, cu excepția cazului în care am o imagine în miniatură pentru postare fără legendă. Dacă nu există o legendă, tot se afișează div-ul "front-caption". Am stilizat .front-caption cu borduri și când nu există o legendă, afișează imaginea în miniatură pentru postare cu div-ul gol "front-caption" și borduri. Încerc să fac ca div-ul să fie ascuns, cu excepția cazului în care există o legendă pentru imaginea în miniatură a postării.

Paul Coppock Paul Coppock
28 aug. 2013 14:21:22
0

Majoritatea acestor răspunsuri par destul de învechite. Încercați această funcție:

the_post_thumbnail_caption();

Referință: https://developer.wordpress.org/reference/functions/the_post_thumbnail_caption/

De exemplu:

<div class="featured-image-caption"><?php echo the_post_thumbnail_caption(); ?></div>
15 mai 2023 13:24:45