I have a gallery attached to a page. On that page, I’m running the following query:
$events_gallery = new WP_Query( // Start a new query for our videos
array(
'post_parent' => $post->ID, // Get data from the current post
'post_type' => 'attachment', // Only bring back attachments
'post_mime_type' => 'image', // Only bring back attachments that are images
'posts_per_page' => '3', // Show us the first three results
'status' => 'inherit', // Inherit the status of the parent post
'orderby' => 'rand', // Order the attachments randomly
)
);
I’ve experimented quite a few ways and, for some reason, I can’t get attachments to return. Am I missing something obvious here?
Update*
Thanks to Wok for pointing me in the right direction.
It turns out I was using “status” instead of “post_status”. The codex had used “status” as the example in its in-context explanation of the “attachment” post type. I updated the codex to reference “post_status” instead. The correct code is as follows:
$events_gallery = new WP_Query( // Start a new query for our videos
array(
'post_parent' => $post->ID, // Get data from the current post
'post_type' => 'attachment', // Only bring back attachments
'post_mime_type' => 'image', // Only bring back attachments that are images
'posts_per_page' => '3', // Show us the first three results
'post_status' => 'inherit', // Attachments default to "inherit", rather than published. Use "inherit" or "any".
'orderby' => 'rand', // Order the attachments randomly
)
);
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
These are the query parameters i use…works for me when i loop through the results
array(
'post_parent' => $post->ID,
'post_status' => 'inherit',
'post_type'=> 'attachment',
'post_mime_type' => 'image/jpeg,image/gif,image/jpg,image/png'
);
For more detail, please see official documentation for WP_Query’s status parameters
Method 2
Add in $args, it is important.
'post_status' => 'any'
Do not: 'post_status' => null
This is important because attachments don’t have a post_status, so the default value for post_status, published, will find no attachments.
Method 3
Looking at the query it generates, it does appear to be a bug of sorts. ‘status’ => ‘inherit’ is interpreted as the parent’s status, when the entry in the db for the attachment is literally ‘inherit’.
An alternative is to use get_children in place of WP_Query.
Method 4
I’ve been able to display all images that are attachments to a post using this code.
<?php
$args = array( 'post_type' => 'attachment', 'orderby' => 'menu_order', 'order' => 'ASC', 'post_mime_type' => 'image' ,'post_status' => null, 'post_parent' => $post->ID );
$attachments = get_posts($args);
if ($attachments) {
foreach ( $attachments as $attachment ) { ?>
<img src="<?php echo wp_get_attachment_url( $attachment->ID , false ); ?>" />
<?php }
} ?>
And to echo the URL of the original full size image, you could link that image off to
<?php echo wp_get_attachment_url( $attachment->ID , false ); ?>
Hopefully this is an approach to what you’re trying to do.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0