In my WordPress site, I made a custom page template, which contained a custom query [using WP_Query()]. With that query, I can perfectly get the posts of a certain category. But I want to show the page contents along with the queried posts.
Thing will be like:
—————————
Page Heading
page contents
Queried Post Heading
queried post contents
—————————
- What can I do?
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
I’m using two loops. First loop is to show the page content, and the second loop is to show the queried post contents. I commented into the codes where necessary. I emphasized into the loops, as Deckster0 said in WordPress support that, the_content() works only inside a WordPress Loop. I’m placing these code into a my own template:
<?php
/*
* Template Name: My Template
*/
get_header(); ?>
<div id="container">
<div id="content" class="pageContent">
<h1 class="entry-title"><?php the_title(); ?></h1> <!-- Page Title -->
<?php
// TO SHOW THE PAGE CONTENTS
while ( have_posts() ) : the_post(); ?> <!--Because the_content() works only inside a WP Loop -->
<div class="entry-content-page">
<?php the_content(); ?> <!-- Page Content -->
</div><!-- .entry-content-page -->
<?php
endwhile; //resetting the page loop
wp_reset_query(); //resetting the page query
?>
<?php
// TO SHOW THE POST CONTENTS
?>
<?php
$my_query = new WP_Query( 'cat=1' ); // I used a category id 1 as an example
?>
<?php if ( $my_query->have_posts() ) : ?>
<div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
<h1 class="entry-title"><?php the_title(); ?></h1> <!-- Queried Post Title -->
<div class="entry-content">
<?php the_excerpt(); ?> <!-- Queried Post Excerpts -->
</div><!-- .entry-content -->
<?php endwhile; //resetting the post loop ?>
</div><!-- #post-<?php the_ID(); ?> -->
<?php
wp_reset_postdata(); //resetting the post query
endif;
?>
</div><!-- #content -->
</div><!-- #container -->
Method 2
Two loops is common to do this, but a bit overdosed.
Every post or page gives you the super-variable $post. Ever wondered why your get_post_meta() works with a simple $post->ID 😉 ?
So, before you start the WP_Query() that gets your listed posts, you can access the current page-/post-data with $post->ID, $post->post_content, $post->guid and so on.
In the loop, this variable gets filled by the looped post. To save it for later, you can either make a new variable
$temp_post = $post // new WP_Query() + loop here
or call
wp_reset_query()
after the listing. The last function should be called anyway to ensure that the data in your sidebar is the right for the current page/post.
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