WordPress.org

Support

Support » Plugins and Hacks » [Resolved] Pull latest attachment from post?

[Resolved] Pull latest attachment from post?

Viewing 15 replies - 1 through 15 (of 48 total)
  • You would first need to perform a quick query to figure out the latest attachment on a post:

    <?php
    global $wpdb;
    $attachment_id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_parent = '$post->ID' AND post_status = 'inherit' AND post_type='attachment' ORDER BY post_date DESC LIMIT 1");
    ?>

    Here are some options from there on:

    Display link to attachment file (if an image, the image becomes the link):
    <?php the_attachment_link($attachment_id); ?>

    If an image, display the attachment:
    <?php echo get_attachment_icon($attachment_id); ?>

    Display the URL to the attachment’s ‘page’:
    <?php echo get_attachment_link($attachment_id); ?>

    Perfect! Thank you so much!

    I’m trying to set up my wp template to call attachments and related data (jpg images and text) but can’t find any sort of list of usable attachment-related tags other than these.

    I’d like to:

    1) Show the attachment data (the info I type in when I upload an image) on an archive page, but just for those in 1 category, not an entire list.

    2) Add rel=”lightbox” to the image links so a lightbox plugin will work. I’m thinking I can add the rel portion to the actual code that runs when <?php the_attachment_link($attachment_id); ?> is called?

    Any help or suggestions will be much appreciated!

    This is a VERY helpfull topic.

    I want to do the same thing but instead of just the latest attachment, i want to pull ALL attachments for a post.

    How do i turn this query into something that generates an array of all the files.

    $attachment_id = $wpdb->get_var(“SELECT ID FROM $wpdb->posts WHERE post_parent = ‘$post->ID’ AND post_status = ‘inherit’ AND post_type=’attachment’ ORDER BY post_date DESC LIMIT 1”);

    > I want to do the same thing but instead of just the latest attachment, i want to pull ALL attachments for a post.

    You can do this with WordPress’s get_posts function; see, e.g., http://codex.wordpress.org/Template_Tags/get_posts#Show_attachments_for_the_current_post

    You can use some of the functions Kafkaesqui mentioned above (these are mostly undocumented: http://codex.wordpress.org/Category:Attachments).

    Excellent topic and thanks for the reply Kafkaesqui.

    Good thread. Lets keep it going. We could all do some really fun stuff with our photo galleries (jquery stuff) if we could spit them out into an unordered list on single.php.

    On single.php, I would like the flexibility to do the following:

    <ul>
    <li><a href="#medium-image"><img src="#thumbnail" /></a></li>
    <li><a href="#medium-image-2"><img src="#thumbnail-2" /></a></li>
    <li><a href="#medium-image-3"><img src="#thumbnail-3" /></a></li>
    </ul>

    What code might one use on single.php to achieve the desired output? I’ve attempted the suggestions mentioned on this thread posted here:
    http://codex.wordpress.org/Template_Tags/get_posts#Show_attachments_for_the_current_post

    but for whatever reason, when posted inside the loop on single.php it runs the loop for all posts that contain galleries.

    Ideally, single.php would contain conditional logic that would only display the container divs and class for the gallery if a gallery exists.

    <?php if ( $images = get_children(array(
    		'post_parent' => get_the_ID(),
    		'post_type' => 'attachment',
    		'post_mime_type' => 'image',
    	))) : ?>
    	<ul>
    		<?php foreach( $images as $image ) :  ?>
    			<li><?php echo wp_get_attachment_link($image->ID, 'medium'); ?></li>
    		<?php endforeach; ?>
    	</ul>
    <?php else: // No images ?>
    	<!-- This post has no attached images -->
    <?php endif; ?>

    Sam_a … amazing, thank you.
    I was actually looking for a combo of all this. Just the newest attachment, but not in full and not in thumbnail, but the medium sized thingie.
    I created a functions.php file in my theme directory.

    function postimage($size=medium) {
    	if ( $images = get_children(array(
    		'post_parent' => get_the_ID(),
    		'post_type' => 'attachment',
    		'numberposts' => 1,
    		'post_mime_type' => 'image',)))
    	{
    		foreach( $images as $image ) {
    			echo wp_get_attachment_link($image->ID, $size);
    		}
    	} else {
    		echo "No Image";
    	}
    }

    But now I want to get more control over this and specifically either remove the link to the full-size image OR make it lightbox-compatible. Any way to get just the medium-sized preview pic url? Or add the necessary “rel=…” part to the img link?

    Something like

    <a href="<?php echo wp_get_attachment_url($image->ID); ?>" rel="lightbox"><?php echo wp_get_attachment_image( $image->ID, 'medium' ); ?></a>

    Awesome, thank you so much.
    Here’s what my code looks like now:

    function postimage($size=medium) {
    	if ( $images = get_children(array(
    		'post_parent' => get_the_ID(),
    		'post_type' => 'attachment',
    		'numberposts' => 1,
    		'post_mime_type' => 'image',)))
    	{
    		foreach( $images as $image ) {
    			$attachmenturl=wp_get_attachment_url($image->ID);
    			$attachmentimage=wp_get_attachment_image( $image->ID, $size );
    
    			echo '<a href="'.$attachmenturl.'" rel="lightbox">'.$attachmentimage.'</a>';
    		}
    	} else {
    		echo "No Image";
    	}
    }

    I can call it in my template simply by using

    <?php postimage(); ?>

    or

    <?php postimage(‘thumbnail’); ?>

    Excellent thread! The question I have is how can I get it to pull random thumbnails from any post? Any maybe include the title of the post?

    I was using a different code before the 2.5 upgrade and now it won’t work.

    <?php
    global $wpdb;
    $numposts = 4;
    
    $rand_posts = $wpdb->get_results("SELECT * FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta
    WHERE post_status = 'publish'
    AND wposts.ID = wpostmeta.post_id
    AND wpostmeta.meta_key = 'thumb'
    ORDER BY RAND() LIMIT $numposts");
    foreach($rand_posts as $post) :
    setup_postdata($post);
    ?>

    I sort of want it like People’s Magazine “What’s Hot” section
    http://offtherack.people.com/

    Just to send out a warning: If the EXIF data of an image contains special characters, certain functions in WordPress 2.5.1 will only return the URL of the full size image.
    See: ticket 7278

    The question I have is how can I get it to pull random thumbnails from any post?

    Something like

    $images = get_children('post_type=attachment&post_mime_type=image&post_parent=0');
    
    $image = $images[array_rand($images)];
    
    $parent =& get_post($image->post_parent);
    
    echo '<a href="'
    	. get_permalink($image->post_parent)
    	. '">'
    	. wp_get_attachment_image( $image->ID, 'thumbnail' )
    	. apply_filters( 'the_title', $parent->post_title )
    	. '</a>';

    Awesome thread!

    I list ten other articles at the end of a post, where I would like to show an icon image next to the title.

    However, all the codes I tried here brings up an image for the first title, and not for the rest. Also, images link to image url, not to post url that is attached. Strange enough, the rest of the nine titles stated missing attachment, even though I have images for those posts.

    I have tried
    <?php the_attachment_link( 13, false, array(48, 48) );?>
    I got it from here

    http://codex.wordpress.org/Template_Tags/the_attachment_link

    it works but “13” shows the specific category, and not the actual listed title post.

    Please, help. Thank you in advance.
    007casper

Viewing 15 replies - 1 through 15 (of 48 total)
  • The topic ‘[Resolved] Pull latest attachment from post?’ is closed to new replies.