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 have a list of attachment IDs which are built using this array:

$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );

Is it possible to take the image ID from this list and find the Title and permalink of the POST the image is attached to?

I know it's feasible because the Media Library shows it, but I can't find the right way to do this with the codex.

I have tried this code, however it returns the title and permalink to the attachment itself, not the post it's attached to:

$parent = get_post_field( 'post_parent', $imgID);
$link = get_permalink($parent);
share|improve this question

2 Answers 2

up vote 2 down vote accepted

So, if you start with this:

$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );

Then $all_images is an array of objects. Step through each one:

foreach ( $all_images as $image ) {}

Inside that foreach, you can use the normal parameters available to the $post object:

  • $image->ID is the ID of the attachment post
  • $image->post_parent is the ID of the attachment post's parent post

So, let's use that, to get what you're after, using get_the_title() and get_permalink():

// Get the parent post ID
$parent_id = $image->post_parent;
// Get the parent post Title
$parent_title = get_the_title( $parent_id );
// Get the parent post permalink
$parent_permalink = get_permalink( $parent_id );

That's pretty much it!

Putting it all together:

<?php
// Get all image attachments
$all_images = get_posts( array(
'post_type' => 'attachment',
'numberposts' => -1,
) );
// Step through all image attachments
foreach ( $all_images as $image ) {
    // Get the parent post ID
    $parent_id = $image->post_parent;
    // Get the parent post Title
    $parent_title = get_the_title( $parent_id );
    // Get the parent post permalink
    $parent_permalink = get_permalink( $parent_id );
}
?>
share|improve this answer
    
I guess I was over thinking it. This worked perfectly! –  Pat Mar 1 '12 at 16:21

The $images, is an array of post objects (attachments). You can use wp_list_pluck to extract their parent's ID into an array. (array_unique and array_filter remove duplicate IDs and empty IDs respectively - this may /may not be desirable).

You can them loop through the IDs and use get_permalink and get_the_title to obtain the post's permalink and title:

$images = get_posts( array(
    'post_type' => 'attachment',
    'numberposts' => -1,
) );
$parents = array_filter(wp_list_pluck($images,'post_parent'));
$parents = array_unique($parents);
echo "<ul>";
foreach ($parents as $id){
    echo "<li><a href='".get_permalink($id)."' >".get_the_title($id)."</a></li>";
}
echo "</ul>";
share|improve this answer

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.