web-dev-qa-db-fra.com

Afficher la vignette du message sans être en vedette Image

J'espère pouvoir expliquer ce que je vais faire ici. Sur la page principale de mon projet actuel, j'affiche la vignette de l'image sélectionnée de chaque article, ainsi qu'un extrait du contenu de l'article. Dans chacune des pages de publication, il y a une galerie par défaut WP avec 2 à 4 images à l'intérieur.

Ce que je veux faire, c'est faire en sorte que mon client ne soit pas toujours obligé d'utiliser une image sélectionnée dans chaque message, de sorte que la vignette apparaisse toujours sur la page d'accueil. En d’autres termes, pour le moment, il doit choisir une image à afficher afin d’obtenir la vignette représentative de chaque publication dans la boucle de la page d’accueil.

Puis-je faire en sorte que même s'il ne sélectionne pas une image en vedette pour un message, il reste une vignette pour le représenter? Puis-je le faire automatiquement en sélectionnant simplement la première image dans la galerie de l'article, si aucune image sélectionnée n'est choisie?

Juste au cas où, voici une partie de ce que j'utilise, en termes de code:

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




         </div><!--end 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(__('Continue reading', 'example')); ?>
<?php wp_link_pages('before=<p class="pages">' . __('Pages:','example') .

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





</div>

<?php endwhile; ?>

<?php else : ?>

<p class="no-posts"><?php _e('Sorry, no posts matched your criteria',  
'example'); ?></p>

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

Ensuite, ceci est dans mon fichier de fonctions:

 // This theme uses post thumbnails
add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 150, 100, true );




// Automatically makes featured image thumbs a clickable link
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;

}

// This theme displays full size featured image on the Post's page
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 est l'adresse si vous souhaitez voir de quoi je parle. Vous verrez ce que je veux dire en regardant le post intitulé: "1991 GMC Sierra". Je n'ai pas utilisé d'image en vedette pour le message, aucune vignette n'est donc affichée. Merci d'avance!

5
Anthony Myers

Je ne peux pas recommanderObtenir l'imageplugin (par Justin Tadlock) suffisamment. Il fait partie des meilleurs codes existants, très bien entretenu et soigné. Plus important encore, il fait ce dont vous avez besoin, tout en vous offrant une foule d'options.

Comment ça tire les images?

  1. Recherche une image par champ personnalisé (celui de votre choix).

  2. Si aucune image n'est ajoutée par un champ personnalisé, recherchez une image à l'aide de the_post_thumbnail () (nouvelle fonctionnalité d'image de WP 2.9).

  3. Si aucune image n'est trouvée, une image est jointe à votre message.

  4. Si aucune image n'est jointe, il peut extraire une image de votre contenu de publication (désactivée par défaut).

  5. Si aucune image n'est trouvée à ce stade, il s'agira par défaut d'une image que vous avez définie (non définie par défaut).

6
its_me

Il suffit de vérifier la vignette, et si elle n'est pas définie, utilisez plutôt la première image de la galerie. Quelque chose comme ça:

$size = 'thumbnail'; // whatever size you want
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);
    }
}

Fondamentalement, si aucune image sélectionnée n'existe, has_post_thumbnail () retournera false. Donc, vous appelez get_children pour obtenir les images attachées à ce message. Notez que numberposts = 1, il n'obtient que le premier. Ensuite, vous affichez cette image à l'aide de wp_get_attachment_image.

Notez que j'ai utilisé le foreach même si je ne reçois qu'une image ici. En effet, get_children renvoie un tableau de publications, quel que soit le nombre de publications renvoyées. Je suis donc en train de "boucler" un tableau de taille 1. S'il n'y a pas d'images, le tableau sera vide et rien ne sera ainsi généré.

Si vous n'aimez pas utiliser get_children, un nouveau WP_Query similaire pourrait être construit pour obtenir la première image de pièce jointe de manière similaire.

  • Ajout de l'accolade manquante à la boucle foreach.
6
Otto