Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

Hello I have a query that gets a post with id=x and it works but it leaves out the comment box.

Is there a way to add "get comment box" to the query?

<?php 
$post_id = 104; 
$queried_post = get_post($post_id); 
$content = $queried_post->post_content; 
$content = apply_filters('the_content', $content); 
$content = str_replace(']]>', ']]&gt;', $content); 
echo $content;  
?>
share|improve this question

1 Answer 1

up vote 0 down vote accepted

First of all, welcome to WPSE!

By default, the comment box does not come with the post object, what you are looking for is the comments_template function.

It should be as simple as changing your code to this:

<?php 
$post_id = 104; 
$queried_post = get_post($post_id); 
$content = $queried_post->post_content; 
$content = apply_filters('the_content', $content); 
$content = str_replace(']]>', ']]&gt;', $content); 
echo $content;
comments_template();
?>

But if I'm correct this would only work for the current post in the loop.

Looking at the function in wp-includes/comment-template.php, it uses global $post and global $wp_query variables. You would need to modify that value in order for the comments template to show up for the post you are displaying.

You could modify that using query_posts instead of get_post, but be sure to reset the query afterwards:

$post_id = 104; 
query_posts( array( 'p' => $post_id ) ); 

while( have_posts() ) : the_post();

    $content = apply_filters( 'the_content', get_the_content() ); 
    $content = str_replace( ']]>', ']]&gt;', $content ); 
    echo $content;

    comments_template();

endwhile;

wp_reset_postdata(); // Don't forget!

I haven't tested this but it should work. I would also suggest reading this awesome answer by Rarst about when to use what function to "get posts". :)

share|improve this answer
    
Hello jared, thanks for the welcome and the code. The 2nd query works but it expresses TWO copies of everything! I have been playing with it but have not suceeded in geting only one copie yet. Thanks Tim –  Tim Mar 1 '12 at 16:14
    
This what I am using`<?php $post_id = 257; query_posts( array( 'p' => $post_id ) ); while( have_posts() ) : the_post(); $content = apply_filters( 'the_content', get_the_content() ); $content = str_replace( ']]>', ']]&gt;', $content ); echo $content; comments_template(); endwhile; wp_reset_postdata(); // Don't forget! ?>` –  Tim Mar 1 '12 at 16:50
    
Works fine, sorry about the confusion I was using it in a tab plugin and it was the tab plugin that was adding the code to all the tabs even the tab the code was in so it was there twice. –  Tim Mar 1 '12 at 18:36
    
@Tim Glad it works! If my answer was correct can you mark it as the best answer? Thanks! :) –  Jared Mar 1 '12 at 20:15

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.