Afișarea Miniaturii Articolului Fără a fi Imagine Reprezentativă

5 iul. 2012, 06:26:00
Vizualizări: 20.9K
Voturi: 5

Sper că pot explica ce încerc să realizez aici. În pagina principală a proiectului meu curent, afișez miniatura Imaginii Representative pentru fiecare articol, împreună cu un fragment din conținutul articolului. În fiecare dintre paginile articolelor există o galerie WP implicită cu 2 până la 4 imagini.

Ceea ce vreau să fac este să permit clientului meu să nu fie nevoit să folosească mereu o Imagine Reprezentativă în fiecare articol, astfel încât miniatura să apară întotdeauna pe pagina principală. Cu alte cuvinte, în prezent, trebuie să aleagă o imagine ca fiind Reprezentativă pentru a avea acea miniatură pentru fiecare articol din bucla de pe pagina principală.

Pot face în așa fel încât chiar dacă nu alege o imagine reprezentativă pentru un articol, să existe totuși o miniatură care să reprezinte articolul? Pot face să selecteze automat prima imagine din galeria articolului, dacă nu este aleasă nicio imagine reprezentativă?

Pentru referință, iată o parte din codul pe care îl folosesc:

              <div id="image-wrap">
             <?php 
              if ( has_post_thumbnail() ) {
              the_post_thumbnail();
               } 
              ?>




         </div><!--sfârșit image-wrap-->


                <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
                 <?php the_title('<h2 class="entry-title"><a href="' .  

get_permalink() . '" title="' . the_title_attribute('echo=0') . '" 
rel="bookmark">', '</a></h2>'); ?>

                 <div class="entry-content">
<?php the_content(__('Continuă citirea', 'example')); ?>
<?php wp_link_pages('before=<p class="pages">' . __('Pagini:','example') .

'&after=</p>'); ?>
</div>





</div>

<?php endwhile; ?>

<?php else : ?>

<p class="no-posts"><?php _e('Ne pare rău, niciun articol nu corespunde criteriilor',  
'example'); ?></p>

<?php endif; ?>
<?php wp_reset_query(); ?> 

Apoi acesta este în fișierul meu FUNCTIONS:

// Această temă folosește miniaturi pentru articole
add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 150, 100, true );




// Face automat miniaturile imaginilor reprezentative linkuri care pot fi accesate
add_filter( 'post_thumbnail_html', 'my_post_image_html', 10, 3 );

function my_post_image_html( $html, $post_id, $post_image_id ) {

$html = '<a href="' . get_permalink( $post_id ) . '" title="' . esc_attr(   
get_post_field( 'post_title', $post_id ) ) . '">' . $html . '</a>';
return $html;

}

// Această temă afișează imaginea reprezentativă la dimensiune completă în pagina Articolului
function InsertFeaturedImage($content) {

global $post;

$original_content = $content;

if ( current_theme_supports( 'post-thumbnails' ) ) {

    if ((is_page()) || (is_single())) {
        $content = the_post_thumbnail('page-single');
        $content .= $original_content;

    }

}
return $content;
}

add_filter( 'the_content', 'InsertFeaturedImage' ); 

http://dependablecarcompany.com este adresa dacă doriți să vedeți despre ce vorbesc. Veți înțelege la ce mă refer când veți vedea articolul intitulat: "1991 GMC Sierra". Nu am folosit o imagine reprezentativă pentru acest articol, așa că nu este afișată nicio miniatură. Mulțumesc anticipat!

2
Comentarii

Scuze, nu mă lasă să editez ultimul comentariu. Ok, cu puțin ajutor, am reușit să mă apropii și mai mult de ceea ce vreau cu: if ( has_post_thumbnail() ) { the_post_thumbnail(); } else { get_the_image( array('size' => 'thumbnail', 'image_class' => 'wp-post-image'));
} Thumbnail-ul care este afișat are dimensiunile puțin ciudate, dar cred că pot rezolva partea asta.

Anthony Myers Anthony Myers
8 iul. 2012 00:12:04
Toate răspunsurile la întrebare 2
9

Nu pot recomanda suficient plugin-ul Get the Image (de Justin Tadlock). Este unul dintre cele mai bune disponibile, foarte bine întreținut și cu un cod curat — mai important, face exact ce ai nevoie, oferind în același timp o gamă largă de opțiuni.

Cum extrage imaginile?

  1. Caută o imagine după câmp personalizat (pe care îl alegi tu).

  2. Dacă nu este adăugată nicio imagine prin câmp personalizat, verifică o imagine folosind the_post_thumbnail() (noua funcționalitate de imagine din WP 2.9).

  3. Dacă nu este găsită nicio imagine, ia o imagine atașată postării tale.

  4. Dacă nu este atașată nicio imagine, poate extrage o imagine din conținutul postării (dezactivat implicit).

  5. Dacă în acest moment nu este găsită nicio imagine, va folosi implicit o imagine pe care o setezi tu (nesetată implicit).

5 iul. 2012 07:00:54
Comentarii

Bine, înțeleg cam unde vreau să ajung cu asta, dar acum am întâmpinat niște probleme. Am folosit acest cod pentru a afișa o miniatură dacă nu este specificată o Imagine Reprezentativă: if ( has_post_thumbnail() ) { the_post_thumbnail(); } else { get_the_image( array('size' => 'thumbnail'));
} Ce este ciudat însă este că imaginea afișată nu are același stil ca restul miniaturilor mele. Dacă te uiți pe http://dependablecarcompany.com

Anthony Myers Anthony Myers
7 iul. 2012 02:27:41

De asemenea, acum dacă dai click pe postarea în cauză: "1991 GMC Sierra" vei vedea că imaginea principală nu mai este afișată. Fără acest plugin și fără modul rescris de a apela miniatura în loop, imaginea principală a postării este afișată exact în partea de sus mijloc a paginii. Poți vedea despre ce vorbesc dacă dai click pe orice altă postare.

Anthony Myers Anthony Myers
7 iul. 2012 02:32:03

Bine, modul în care funcționează acest plugin poate să nu fie potrivit pentru tema ta așa cum este acum, decât dacă ai vrea să modifici codul. Dar ai citit fișierul readme.html care a venit cu plugin-ul?

its_me its_me
7 iul. 2012 04:34:49

Da, citeam fișierul readme și speram să găsesc ceva care să mă ajute, dar poate nu o să fie de folos. Ugh. Chiar am nevoie de ceva care să funcționeze.

Anthony Myers Anthony Myers
7 iul. 2012 10:56:48

Tocmai am găsit asta: http://www.960development.com/code-snippet/first-image-of-wordpress-post-gallery/ dar folosește timthumb, și acum nu sunt sigur dacă ar trebui să-l folosesc din cauza problemelor de acum ceva timp. Care sunt părerile tale?

Anthony Myers Anthony Myers
7 iul. 2012 19:36:33

@AnthonyMyers Aș evita TimThumb (și altele asemenea) dacă aș fi în locul tău. Și cred că aceasta ar fi sugestia oricărui utilizator de pe WPSE.

its_me its_me
7 iul. 2012 19:38:11

@AnthonyMyers Tocmai am început o recompensă pentru întrebarea ta. Vei primi ajutor. Oricum, reputația mea nu-mi folosește la nimic. :)

its_me its_me
7 iul. 2012 19:40:54

Aahan, sper că nu este un rămas-bun! Pentru că pari dispus să-ți cheltuiești toată reputația ;o) Felicitări pentru spiritul de investitor!

brasofilo brasofilo
7 iul. 2012 22:00:03

@AahanKrish Mulțumesc foarte mult pentru ajutor! Chiar m-ai îndreptat în direcția corectă. Sunt pe cale să reușesc! Încerc doar să fac ca miniaturile (care nu sunt Imagini Recomandate) să se afișeze corect. Nu se scalează corect ca miniaturile din Imagini Recomandate. Din nou, dacă te uiți pe site-ul dependablecarcompany.com, vei vedea că nu sunt exact în regulă. Am folosit css pentru a le da lățime și înălțime maximă, dar pur și simplu nu se scalează. Dacă nu ai timp pentru această parte, înțeleg. Elementele de bază ale întrebării mele inițiale au primit răspuns. Mersi mult!

Anthony Myers Anthony Myers
8 iul. 2012 01:51:59
Arată celelalte 4 comentarii
4

Verifică doar thumbnail-ul, iar dacă nu este setat, folosește prima imagine din galerie. Ceva de genul:

$size = 'thumbnail'; // orice dimensiune dorești
if ( has_post_thumbnail() ) {
    the_post_thumbnail( $size );
} else {
    $attachments = get_children( array(
        'post_parent' => get_the_ID(),
        'post_status' => 'inherit',
        'post_type' => 'attachment',
        'post_mime_type' => 'image',
        'order' => 'ASC',
        'orderby' => 'menu_order ID',
        'numberposts' => 1)
    );
    foreach ( $attachments as $thumb_id => $attachment ) {
        echo wp_get_attachment_image($thumb_id, $size);
    }
}

Practic, dacă nu există o imagine reprezentativă, atunci has_post_thumbnail() va returna false. Deci apelezi get_children pentru a obține imaginile atașate acestui articol. Observă numberposts = 1, deci va obține doar prima imagine. Apoi afișezi acea imagine folosind wp_get_attachment_image.

Observă că am folosit foreach chiar dacă obțin doar o singură imagine aici. Acest lucru se întâmplă pentru că get_children returnează un array de postări, indiferent de câte postări returnează. Deci "parcurg" un array de dimensiune 1. Dacă nu există imagini, array-ul va fi gol și deci nu se va afișa nimic.

Dacă nu-ți place să folosești get_children, atunci poate fi construită o interogare WP_Query similară pentru a obține prima imagine atașată într-un mod similar.

  • Am adăugat acolada lipsă la bucla foreach.
7 iul. 2012 21:38:12
Comentarii

Minunat. Iartă-mă, sunt groaznic la PHP, deci sunt sigur că aceasta este o remediere ușoară, dar primesc o eroare de sintaxă când încerc să folosesc asta în Dreamweaver. (Da, știu, nu ar trebui să folosesc DW, haha!)

Anthony Myers Anthony Myers
8 iul. 2012 00:19:13

Hmm... Nu. Nu sunt erori de sintaxă acolo. Verifică-ți scrierea?

Otto Otto
8 iul. 2012 00:37:35

Ok, am reușit să fac această metodă să funcționeze, dar afișează o miniatură care nu are stil și este întinsă/pixelată. Totuși, mulțumesc pentru răspuns!

Anthony Myers Anthony Myers
8 iul. 2012 08:04:42

Aș prefera să folosesc codul pe care l-ai sugerat, în loc de un plugin, dar pur și simplu nu afișează corect imaginea mică. Dar oricum, ai putea să mă ajuți cu întrebarea mea înrudită pe această problemă? http://wordpress.stackexchange.com/questions/57861/how-to-display-a-posts-featured-image-with-this-code

Anthony Myers Anthony Myers
10 iul. 2012 03:47:35