1

I would like to query for images attached to ALL posts of certain custom post type (e.g. 'gallery').

I can't see a way to do this by using only WP_Query. The workaround would be to query for all posts of a custom post type, then get the attachments and stuff everything together. But i don't think that this would be a good solution, because you end up doing multiple queries for something that should be done in one.

Please help =)

1

Try this code and replace custom-post with your custom post type.

$query = new WP_Query( array( 'post_type' => 'custom-post', 'posts_per_page' => -1 ) );
if( $query->have_posts() ){
    while($query->have_posts()){
        $query->the_post();
        $image_query = new WP_Query( array( 'post_type' => 'attachment', 'post_status' => 'inherit', 'post_mime_type' => 'image', 'posts_per_page' => -1, 'post_parent' => get_the_ID() ) );
        while( $image_query->have_posts() ) {
            $image_query->the_post();
            echo wp_get_attachment_image( get_the_ID() );
        }
    }
}
  • Good snippet, but I think it would be better if you use get_posts() – Mamaduka Dec 6 '11 at 11:12
  • If you check the core files get_posts() itself instantiates a new WP_Query object. So that's why I prefer using WP_Query() directly. – Joshua Abenazer Dec 6 '11 at 11:28
  • Thank you for your answer, but its not what i need: I want a loopable list of all the images which are attached to any posts of a certain type, regardless to which post they belong. I can see that your way does roughly the same, but it does not give a single query for all images. I used a custom SQL-query for this now. – yoda2k Dec 6 '11 at 11:35
  • Query inside a loop, not a good idea! – Ashfame Dec 6 '11 at 12:38
0

I have added rand and posts_per_page to the last answer

$query = new WP_Query( array( 'post_type' => 'custom-post', 'posts_per_page' => 30, 'orderby'=>'rand' ) );
if( $query->have_posts() ){
    while($query->have_posts()){
        $query->the_post();
        $image_query = new WP_Query( array( 'post_type' => 'attachment', 'post_status' => 'inherit', 'post_mime_type' => 'image', 'posts_per_page' => 1, 'post_parent' => get_the_ID() ) );
        while( $image_query->have_posts() ) {
            $image_query->the_post();
            echo wp_get_attachment_image( get_the_ID() );
        }
    }
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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