I was looking to be able to display PDF and other types of documents under my search page in WordPress and I couldn’t find an easy way to filter this with my $query variable. So I wrote the following code.
1- Get Images attachments ID’s in an array
function get_images(){ $arr = array(); $args = array( 'post_type' => 'attachment', 'posts_per_page' => -1 ); $the_query = new WP_Query($args); if($the_query->have_posts()): while($the_query->have_posts()): $the_query->the_post(); global $post; if( strpos($post->post_mime_type, 'image') !== false ) array_push( $arr , $post->ID ); endwhile; endif; wp_reset_query(); return $arr; }
2- Exclude Images ID from the query
add_filter('pre_get_posts',function($query){ if($query->is_search): $query->set('post__not_in', get_images() ); endif; });
Cons: You have to perform a WP_Query before performing the search_query so it is not the most optimal solution
Pros: Does the work.