Visualizzare l'Anteprima del Post Senza Immagine in Evidenza

5 lug 2012, 06:26:00
Visualizzazioni: 20.9K
Voti: 5

Spero di riuscire a spiegare cosa sto cercando di ottenere. Nella pagina principale del mio progetto attuale, sto visualizzando la miniatura dell'Immagine in Evidenza di ogni post, insieme a un estratto del contenuto. In ciascuna delle pagine dei post, c'è una galleria WP predefinita con 2-4 immagini all'interno.

Quello che voglio fare è permettere al mio cliente di non dover sempre utilizzare un'Immagine in Evidenza in ogni post, pur mantenendo la visualizzazione della miniatura nella home page. In altre parole, attualmente deve scegliere un'immagine da mettere in evidenza affinché ci sia quella miniatura rappresentativa per ogni post nel loop della home page.

È possibile fare in modo che anche se non sceglie un'immagine in evidenza per un post, ci sia comunque una miniatura che rappresenti il post? Posso fare in modo che scelga automaticamente la prima immagine nella galleria del post, se non viene scelta un'immagine in evidenza?

Nel caso, ecco parte del codice che sto utilizzando:

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

         </div><!--fine 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(__('Continua a leggere', 'example')); ?>
<?php wp_link_pages('before=<p class="pages">' . __('Pagine:','example') .
'&after=</p>'); ?>
</div>

</div>

<?php endwhile; ?>

<?php else : ?>

<p class="no-posts"><?php _e('Spiacenti, nessun post corrisponde ai criteri', 'example'); ?></p>

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

Questo invece è nel file FUNCTIONS:

// Questo tema usa le miniature dei post
add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 150, 100, true );

// Rende automaticamente le miniature delle immagini in evidenza dei link cliccabili
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;
}

// Questo tema visualizza l'immagine in evidenza a dimensione piena nella pagina del Post
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 è l'indirizzo se volete vedere di cosa sto parlando. Capirete cosa intendo guardando il post intitolato: "1991 GMC Sierra". Non ho usato un'immagine in evidenza per il post, quindi non viene mostrata alcuna miniatura. Grazie in anticipo!

2
Commenti

Scusa, non mi permette di modificare l'ultimo commento. Ok, con un po' di aiuto, sono riuscito ad avvicinarmi ancora di più a quello che sto cercando di ottenere con: if ( has_post_thumbnail() ) { the_post_thumbnail(); } else { get_the_image( array('size' => 'thumbnail', 'image_class' => 'wp-post-image'));
} La miniatura che viene generata è un po' fuori dimensione, ma penso di poter risolvere questa parte.

Anthony Myers Anthony Myers
8 lug 2012 00:12:04
Tutte le risposte alla domanda 2
9

Non posso raccomandare abbastanza il plugin Get the Image (di Justin Tadlock). È uno dei migliori disponibili, molto ben mantenuto e con un codice pulito — soprattutto, fa esattamente ciò di cui hai bisogno, offrendoti una vasta gamma di opzioni.

Come recupera le immagini?

  1. Cerca un'immagine tramite un campo personalizzato (a tua scelta).

  2. Se non viene trovata alcuna immagine tramite il campo personalizzato, verifica la presenza di un'immagine usando the_post_thumbnail() (la nuova funzionalità di immagini di WP 2.9).

  3. Se non viene trovata alcuna immagine, prende un'immagine allegata al tuo post.

  4. Se non ci sono immagini allegate, può estrarre un'immagine dal contenuto del tuo post (disabilitato di default).

  5. Se a questo punto non viene trovata alcuna immagine, utilizzerà un'immagine predefinita da te impostata (non impostata di default).

5 lug 2012 07:00:54
Commenti

Ok, sto quasi arrivando a capire questa cosa, ma ora sto avendo problemi con questo. Ho usato questo codice per mostrare una miniatura se non è specificata un'Immagine in evidenza: if ( has_post_thumbnail() ) { the_post_thumbnail(); } else { get_the_image( array('size' => 'thumbnail'));
} La cosa strana però è che l'immagine in output non è stilizzata come le altre mie miniature. Se guardi su http://dependablecarcompany.com

Anthony Myers Anthony Myers
7 lug 2012 02:27:41

Inoltre, ora se clicchi sul post in questione: "1991 GMC Sierra" vedrai che l'immagine principale non viene mostrata. Senza questo plugin e il modo riscritto di chiamare la miniatura nel loop, l'immagine principale del post viene visualizzata proprio in alto al centro della pagina. Puoi vedere di cosa sto parlando se clicchi su qualsiasi altro post.

Anthony Myers Anthony Myers
7 lug 2012 02:32:03

Ok, il modo in cui funziona questo plugin potrebbe non essere adatto al tuo tema così com'è, a meno che tu non voglia modificare il tuo codice. Ma hai letto il file readme.html che è incluso nel plugin?

its_me its_me
7 lug 2012 04:34:49

Sì, stavo leggendo il file readme e speravo di trovare qualcosa che potesse aiutare, ma forse non sarà utile. Ugh. Ho davvero bisogno che qualcosa funzioni.

Anthony Myers Anthony Myers
7 lug 2012 10:56:48

Ho appena trovato questo: http://www.960development.com/code-snippet/first-image-of-wordpress-post-gallery/ ma utilizza timthumb, e ora non sono sicuro se dovrei usarlo a causa dei problemi che ha avuto un po' di tempo fa. Cosa ne pensi?

Anthony Myers Anthony Myers
7 lug 2012 19:36:33

@AnthonyMyers Se fossi in te, eviterei TimThumb (e simili). E credo che sarebbe anche il suggerimento di chiunque su WPSE.

its_me its_me
7 lug 2012 19:38:11

@AnthonyMyers Ho appena iniziato una ricompensa sulla tua domanda. Riceverai aiuto. Tanto la mia reputazione non mi serve a nulla comunque. :)

its_me its_me
7 lug 2012 19:40:54

Aahan, spero non sia un addio! Perché sembri intenzionato a spendere tutta la tua reputazione ;o) Complimenti per lo spirito da investitore!

brasofilo brasofilo
7 lug 2012 22:00:03

@AahanKrish Grazie mille per il tuo aiuto! Mi hai indicato la direzione giusta. Ci sto arrivando! Sto solo cercando di far visualizzare correttamente le miniature (che non sono Featured Images). Non si ridimensionano correttamente come le miniature delle Featured Images. Se guardi di nuovo il sito dependablecarcompany.com, vedrai che non sono proprio corrette. Ho usato il css per impostare larghezza e altezza massime, ma semplicemente non si ridimensionano. Se non hai tempo per questa parte, capisco. Le basi della mia domanda originale hanno avuto risposta. Grazie mille!

Anthony Myers Anthony Myers
8 lug 2012 01:51:59
Mostra i restanti 4 commenti
4

Verifica semplicemente la miniatura, e se non è impostata, usa invece la prima immagine dalla galleria. Qualcosa come questo:

$size = 'thumbnail'; // qualunque dimensione tu voglia
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);
    }
}

In sostanza, se non esiste un'immagine in evidenza, allora has_post_thumbnail() restituirà false. Quindi chiami get_children per ottenere le immagini allegate a questo articolo. Nota numberposts = 1, quindi ottiene solo la prima. Poi mostri quell'immagine usando wp_get_attachment_image.

Nota che ho usato il foreach anche se sto ottenendo solo 1 immagine qui. Questo perché get_children restituisce un array di post, indipendentemente da quanti post sta restituendo. Quindi sto "scorrendo" un array di dimensione 1. Se non ci sono immagini, l'array sarà vuoto e quindi non verrà mostrato nulla.

Se non ti piace usare get_children, allora si potrebbe costruire una nuova WP_Query simile per ottenere la prima immagine allegata in modo analogo.

  • Aggiunta la parentesi graffa mancante al ciclo foreach.
7 lug 2012 21:38:12
Commenti

Fantastico. Perdonami, sono terribile con PHP, quindi sono sicuro che questa sia una correzione semplice, ma sto ricevendo un errore di sintassi quando provo a usare questo in Dreamweaver. (Sì, lo so, non dovrei usare DW, ahah!)

Anthony Myers Anthony Myers
8 lug 2012 00:19:13

Uhm... No. Nessun errore di sintassi lì. Controlla la digitazione?

Otto Otto
8 lug 2012 00:37:35

Ok, ho fatto funzionare questo metodo, ma restituisce una miniatura senza stile e che risulta allungata/pixelata. Grazie comunque per la tua risposta!

Anthony Myers Anthony Myers
8 lug 2012 08:04:42

Preferirei utilizzare il codice che hai suggerito, invece di un plugin, ma semplicemente non mostra correttamente la miniatura. Comunque, saresti in grado di aiutarmi con la mia domanda correlata su questo problema? http://wordpress.stackexchange.com/questions/57861/how-to-display-a-posts-featured-image-with-this-code

Anthony Myers Anthony Myers
10 lug 2012 03:47:35