WordPress.org

Ready to get started?Download WordPress

Forums

How to resolve multiple get_post() queries to just one (8 posts)

  1. nick_nielsen
    Member
    Posted 2 years ago #

    I'm building a template and using elements from 4 posts outside the main loop. At the moment I am calling the posts like this :

    $post_id=24;
      $statement = get_post($post_id);
      wp_reset_query();
    
      $post_id=27;
      $resume = get_post($post_id);
      wp_reset_query();
    
      $post_id=31;
      $contact = get_post($post_id);
      wp_reset_query();
    
      $post_id=44;
      $otheracts = get_post($post_id);
      wp_reset_query();

    This allows me to use, for example, $resume-> post_title as and where I want it, as I can with the other variables I've assigned to each post.
    Is there a more efficient (one query instead of four) way of doing this ?

  2. If you wanted, you could create a main page and then make these posts children of that page... then you could do something like:

    <?php if ( have_posts() ) {  /* Query and display the parent. */
    		while ( have_posts() ) {
    		the_post();
    		the_content();
    		$thispage=$post->ID;
    		}
    		} ?>
    
    	<?php $childpages = query_posts('orderby=menu_order&order=asc&post_type=page&post_parent='.$thispage);
    		if($childpages){ /* display the children content  */
    		foreach ($childpages as $post) :
    		setup_postdata($post); ?>
    
    		<h2><?php the_title(); ?></h2>
    
    	        <?php the_content();
    
    		endforeach;
    		} ?>
    		</div>

    Now this uses query_post... and I know it's better to use wp_query, but it does work.

  3. nick_nielsen
    Member
    Posted 2 years ago #

    Hi, thanks.
    The problem is that I can't get WP to spit out the posts in the order I want.
    This is why I resorted to the individual variable, "get_post()" solution. Also, I use elements from the posts in places widely separated in the markup (which would mean using two loops).

  4. I use your solution as well quite often for some sites. Most of the time it's for a homepage. I use a WPquery call like so:

    <?php
      $new_query_1 = new WP_Query();
      $new_query_1->query(array('page_id' => 2));
       while ($new_query_1->have_posts()) : $new_query_1->the_post();
        the_content();
       endwhile;
      wp_reset_query(); ?>

    Depending on the site, I also use this plugin -
    http://wordpress.org/extend/plugins/multiple-content-blocks/

    it's an easy way to have multiple content areas on one page.

  5. s_ha_dum
    Member
    Posted 2 years ago #

    The problem is that I can't get WP to spit out the posts in the order I want.
    This is why I resorted to the individual variable, "get_post()" solution.

    I'd like to see what you did. It may be possible to get them sorted the way you want, but even if not you may get better performance sorting them in PHP after the query runs as opposed to running multiple queries. That isn't always the case. Given that you are only dealing with 4 posts, it may not work out to a significant difference though.

    Also, I use elements from the posts in places widely separated in the markup (which would mean using two loops).

    Two loops, yes, but not two queries. Once you have the post data you don't have to use all of it once. You can split it up.

  6. nick_nielsen
    Member
    Posted 2 years ago #

    I can understand how to do a WP_query() to get the posts but I am then lost as far as how to sort them or assign a variable to the data of each post.
    I vaguely remember from somewhere that the query will return an array of posts and basically I need to extract each post from the array and give it my variable, but my php skills are virtually inexistent (mostly copy / pasting and light hacking)...

  7. If you use the code that I use with the children pages - my first comment, you can manipulate the order of the pages using the My Page Order plugin.

  8. nick_nielsen
    Member
    Posted 2 years ago #

    I'm using posts at the moment, although I could use pages I suppose.
    I could equally put everything in one post and break it up with jQuery, but that would make updating the data cumbersome.
    I'm not sure, either, if I want there to be a straight forward loop.
    I'm probably being difficult and wanting the impossible...

    But thanks for the suggestion, I'll bear it in mind.

Topic Closed

This topic has been closed to new replies.

About this Topic