On the home page of my site I have a series of tiles that link to various parts of the site. One tile links to the blog and I have written some code to pull the latest post with an image attached to it and output it along with the post title. Here is the code from the theme file:
$z=0; //sets post counter
query_posts(array( 'meta_key' => '_thumbnail_id' )); ?>
<?php if(have_posts()) : ?>
<?php while(have_posts() && $z<1) : the_post();
//Call a post image attachment
$args = array( 'post_type' => 'attachment', 'numberposts' => 1, 'post_status' => null, 'post_parent' => $post->ID );
$attachments = get_posts($args);
if ($attachments) {
foreach ( $attachments as $attachment ) {
$image = wp_get_attachment_image_src($attachment->ID,'homethumbs');
?>
<a href="<?php echo get_posts_page_url(); ?>" title="Visit the Serge Blog" id="homelink3" class="top_homelink"><img src="<?php echo $image[0]; ?>" width="308" height="308" id="home-blogthumb" class="side-homethumb wp-post-image" /> <p class="home_text">Blog<br/><span class="home_thumb_caption">Latest Post: <?php the_title(); ?></span></p> </a>
<?php $z++;
}
//$usedthumbnails[] = get_the_post_thumbnail();
}
?>
<?php
endwhile;
endif;
wp_reset_query(); ?>
I realise that this code doesn’t in fact get the featured image but instead gets 1 image that is attached to a post. This is because the blog posters sometimes forgot to “set as featured image” but any pic uploaded to the post was attached automatically.
With 3.5 it now seems that featured images are not necessarily attached to the posts so will be missed by the above code. What’s the best approach to solve this? Perhaps by only calling the latest featured image… I can just make sure post writers add a featured image to their posts.
The site is http://sergedenimes.com
EDIT: Here is my renewed code:
<?php
global $post;
$args = array( 'numberposts' => 1, 'meta_key' => '_thumbnail_id' );
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post);
$thumb = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'homethumbs' );
?>
<a href="<?php echo get_posts_page_url(); ?>" title="Visit the Serge Blog" id="homelink3" class="top_homelink"><img src="<?php echo $thumb[0]; ?>" width="308" height="308" id="home-blogthumb" class="side-homethumb wp-post-image" /> <p class="home_text">Blog<br/><span class="home_thumb_caption">Latest Post: <?php the_title(); ?></span></p> </a>
<?php endforeach; ?>
What I want to make sure is that say I posted a new post but didn’t give it a featured image, would the above query just ignore it and output the last post that does have a featured image? I’m hoping that the 'meta_key' => '_thumbnail_id'
arguement should do this. If I am wrong I would expect that no url of the attachment would be got and the tile on the home page would just be blank (no image).
You are supplying a
meta_key
but I think you need to give ameta_value
. See this article for more information. I realize some things may have changed in 3.5, but this doesn’t seem right to me.http://codex.wordpress.org/Class_Reference/WP_Query
If you want to get featured image, why not use something like this then?
EDIT: adding more specific use case: