Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I need to show the thumbnail size images (not featured thumbnail) from the posts on the "related posts", code below:

Thumbnail size (the images you insert into the posts from Media library) -vs- Featured thumbnail (is the new function "post-thumbnails" that you can attach an only image as featured image)

What I need:

[1] if the post has an only image, show it.

[2] if it has multi images, show the first.

[3] if non-images, show a static alternative.

Can anyone modify the code below, or have other good snippets to make that happen please? Many thanks!

<?php
$categories = get_the_category($post->ID);
if ($categories) {
    $category_ids = array();
    foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id;
    $args=array(
        'category__in' => $category_ids,
        'post__not_in' => array($post->ID),
        'showposts'=> 5, // Number of related posts that will be shown.
        'caller_get_posts'=> 1
    );
    $my_query = new wp_query($args);
    if( $my_query->have_posts() ) {
        echo '<h3>Related Posts</h3>';
        echo '<ul>';
        while ($my_query->have_posts()) {
            $my_query->the_post();
        ?>
            <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
        <?php
        }
        echo '</ul>';
    }
}
wp_reset_query(); ?>
share|improve this question
add comment

1 Answer

That is simple:

<?php
$categories = get_the_category($post->ID);
if ($categories) {
    $category_ids = array();
    foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id;
   $args=array(
    'category__in' => $category_ids,
    'post__not_in' => array($post->ID),
    'showposts'=> 5, // Number of related posts that will be shown.
    'caller_get_posts'=> 1
);
$my_query = new wp_query($args);
if( $my_query->have_posts() ) {
    echo '<h3>Related Posts</h3>';
    echo '<ul>';
    while ($my_query->have_posts()) {
        $my_query->the_post();
    ?>
        <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a><?php echo catch_that_image() ?></li>
    <?php
    }
    echo '</ul>';
}
}
wp_reset_query(); ?>

In functions.php add this code:

function catch_that_image() {
  global $post, $posts;
  $first_img = '';
  ob_start();
  ob_end_clean();
  $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
  $first_img = $matches [1] [0];

  if(empty($first_img)){ //Defines a default image
    $first_img = "/images/default.jpg";
  }
  return $first_img;
}

Of course, replace the default image path, and style the output to your needs.

Code taken from: http://www.wprecipes.com/how-to-get-the-first-image-from-the-post-and-display-it

share|improve this answer
    
I have tired it. It doesn't work. I guess it will work in the general loop but not inside the "related posts" query. thanks anyway! –  sdcr Aug 24 '12 at 17:10
    
What do you get as the output? –  OriginalEXE Aug 24 '12 at 18:30
    
It does output some image URLs, but not the correct ones, eg. it outputs even the post doesn't have images. –  sdcr Aug 24 '12 at 18:52
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.