Visualizzare l'Anteprima del Post Senza Immagine in Evidenza
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!

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?
Cerca un'immagine tramite un campo personalizzato (a tua scelta).
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).
Se non viene trovata alcuna immagine, prende un'immagine allegata al tuo post.
Se non ci sono immagini allegate, può estrarre un'immagine dal contenuto del tuo post (disabilitato di default).
Se a questo punto non viene trovata alcuna immagine, utilizzerà un'immagine predefinita da te impostata (non impostata di default).

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

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.

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?

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.

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?

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

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

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

@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!

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.

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!)

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

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
