I can get a list of the most recent image attachments like so:
$attachments = get_posts( array(
'post_type' => 'attachment',
'posts_per_page' => $number,
'post_mime_type' => 'image'
) );
This returns all images that have been recently uploaded, whether they are attached to a post or page, or unattached through the Media menu.
What I’d like is to limit that list to only images that are attached to a custom post type I’ve created. (The custom post type is not that important; the same question could be: ‘only images attached to Posts’ or ‘only images attached to Pages.’)
I realize I could test each image after running the above query and eliminate any whose parent is not the right post type, but I want to return a specific number of images ($number
), and this method could eliminate some or all of the returned images!
3 Answers
Did you try adding a filter to get_posts. This isn’t tested, just a thought after a bit of searching :
function my_filter( $query )
{
if( is_home() ) //Example, if u want to display recent images on home
{
$query->set( 'post_type', array( 'attachment', 'my_cpt' ) );
}
}
add_filter( 'pre_get_posts', 'my_filter' );
EDIT :
After rereading, I don’t think it accomplishes what you’re trying to do, I think it will display both attachments, and posts of your CPT.
Guess i’ill leave it here in case it gives you any ideas.
EDIT 2:
The only other way besides filtering in PHP that I can think of would be a custom sql query, and then setting up the post data. EX :
$sql = "SELECT * FROM wp_posts
WHERE post_type="attachment"
AND post_parent IN (SELECT ID FROM wp_posts WHERE post_type="your-cpt")
//ORDER BY";
$posts = $wpdb->get_results( $sql, OBJECT );
//loop - setup_postdata
More info: WordPress Codex