WordPress.org

Ready to get started?Download WordPress

Forums

Show all post with attached image on a single Page (14 posts)

  1. Aidorm
    Member
    Posted 8 months ago #

    Hi,

    I'm trying to set up a page that shows all my post with image in different categories.

    I searched for any relevant post but all I can find is "List all images attached to a post".

    I tried using get_post function but it only displays all image.

    <?php
    $args = array( 'post_type' => 'attachment', 'posts_per_page' => -1, 'post_status' => 'any', 'post_parent' => null );
    $attachments = get_posts( $args );
    if ( $attachments ) {
    	foreach ( $attachments as $post ) {
    		setup_postdata( $post );
    		the_title();
    		the_attachment_link( $post->ID, false );
    		the_excerpt();
    	}
    	wp_reset_postdata();
    }
    ?>

    Can someone help me out? Thanks!

  2. viky081
    Member
    Posted 8 months ago #

    <?php
    // the query
    $args = array( 'post_type' => 'attachment', 'posts_per_page' => -1, 'post_status' => 'any', 'post_parent' => null );
    
    $the_query = new WP_Query( $args ); ?>
    
    <?php if ( $the_query->have_posts() ) : ?>
    
      <!-- pagination here -->
    
      <!-- the loop -->
      <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <h2><?php the_title(); ?></h2>
      <?php endwhile; ?>
      <!-- end of the loop -->
    
      <!-- pagination here -->
    
      <?php wp_reset_postdata(); ?>
    
    <?php else:  ?>
      <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
    <?php endif; ?>

    Use wp_query to fetch the post data.
    http://codex.wordpress.org/Class_Reference/WP_Query

  3. Aidorm
    Member
    Posted 8 months ago #

    thanks a lot. but using wp_query still only shows all images in my website. i guess i can search for the right code to show the thumbnails of all the post associated with an image but i can't get to show those post with images only and not all images in the website.

    thanks again.

  4. viky081
    Member
    Posted 8 months ago #

    It is because you are mentioned post_type as attachment For that reason it showing images! if you want to show the image which is associate on post then change the post type as with post alone.

  5. Aidorm
    Member
    Posted 8 months ago #

    i'm just a newbie in coding but i'm learning a lot in this forum.

    anyway, i've sorted my code and got to this part.

    $args = array( 'post_type' => 'post', 'posts_per_page' => -1, 'post_status' => 'publish', 'post_parent' => null );
    		$the_query = new WP_Query( $args ); ?>
    		<?php if ( $the_query->have_posts() ) : ?>
    			<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    				<?php get_template_part( 'content', get_post_format() ); ?>
    			<?php endwhile; ?>

    it shows my post correctly but i can't exclude those post without any attached image.

  6. viky081
    Member
    Posted 8 months ago #

    Good,
    Now what you want to show exactly in frontend ?
    with attachment or without attachment

  7. Aidorm
    Member
    Posted 8 months ago #

    posts with attachment only.

  8. viky081
    Member
    Posted 8 months ago #

    <ul>
    <!-- LOOP START -->
    <?php
    $args = array('post_type' => 'post', 'posts_per_page' => -1, 'post_status' => 'publish', 'post_parent' => null);
    
    $the_query = new WP_Query( $args ); ?>
        <?php while ($the_query -> have_posts()) : $the_query -> the_post(); ?>
        <!-- THIS DISPLAYS THE POST THUMBNAIL, The array allows the image to has a custom size but is always kept proportional -->
          <li> <?php the_post_thumbnail( array(100,100) );?></li>
          <!-- THIS DISPLAYS THE POST TITLE AS A LINK TO THE MAIN POST -->
          <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
          <!-- THIS DISPLAYS THE EXCERPT OF THE POST -->
          <li><?php the_excerpt(); ?></li>
          <!-- READ MORE LINK -->
          <li><a href="<?php the_permalink() ?>">Read More...</a></li>
        <?php endwhile;?>
    <!-- LOOP FINNISH -->
    </ul>

    Above method is much helpful for you.

    Thanks.

  9. Aidorm
    Member
    Posted 8 months ago #

    the above loop still shows post without image. i'm looking for some exception to the query to remove the posts without image in the search result but i can't find it. :(

  10. Aidorm
    Member
    Posted 8 months ago #

    can someone help me out?

    i tried this code that i got from a closed thread but it doesn't work for me.

    <?php echo '<hr/>'; ?>
    			<?php $args = array ( 'post_type' => 'attachment', 'numberposts' => 1, 'post_status' => null, 'post_mime_type' => 'image', 'post_parent' => $post->ID); $attachments = get_posts($args); ?>
    			<?php global $wp_query, $wp_the_query; ?>
    			<?php $wp_query = new WP_Query( $args ); ?>
    			<?php if( $wp_query->have_posts() ) : ?>
    				<div class="entries">
    					<?php while( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
    						<?php get_template_part( 'content', get_post_format() ); ?>
    					<?php endwhile; ?>
    				</div><!-- .entries -->
    				<?php pinboard_posts_nav(); ?>
    			<?php else : ?>
    				<?php pinboard_404(); ?>
    			<?php endif; ?>
    			<?php wp_reset_postdata(); ?>
    			<?php $wp_query = $wp_the_query; ?>
  11. keesiemeijer
    moderator
    Posted 8 months ago #

    It's not possible with one WP_Query.
    Try it with this example on how to query for posts that have images attached:

    <?php
    $args = array(
    	'post_type' => 'attachment',
    	'post_status' => 'inherit',
    	'post_mime_type' => 'image/jpeg',
    	'fields' => 'id=>parent',
    	'posts_per_page' => -1,
    );
    
    // get all attachment IDs and their parent post IDs.
    $images = new WP_Query( $args );
    if ( $images->have_posts() ) :
    
    	// get attachments parent post IDs
    	$parents = wp_list_pluck( $images->posts, 'post_parent' );
    
    	// remove duplicates and non attached images (parent == 0)
    	$parents = array_filter( array_unique( $parents ) );
    
    	// query for posts with images
    	$args = array(
    		'posts_per_page' => -1,
    		'post__in' => $parents
    	);
    
    	$posts_with_images = new WP_Query( $args );
    
    ?>
    	<?php if ( $posts_with_images->have_posts() ) : ?>
    
    		<?php while ( $posts_with_images->have_posts() ) : $posts_with_images->the_post(); ?>
    			<!-- normal loop stuff here -->
    		<?php endwhile ?>
    	<?php endif; ?>
    
    <?php endif; ?><!-- if ( $images->have_posts() )   -->

    This will be and expensive query if you've got many images.

  12. Aidorm
    Member
    Posted 8 months ago #

    thanks for the response, i'll try that out.

    by the way, what do you mean by expensive query? i'm still a noob in this stuff. :)

  13. Aidorm
    Member
    Posted 8 months ago #

    hey this method actually solved my problem! thanks a lot!

  14. keesiemeijer
    moderator
    Posted 8 months ago #

    You're welcome.

    What I mean is that you query all images in the database (expensive) on the front end of your site. There are probably better ways of doing this.

Reply

You must log in to post.

About this Topic