You’re comparing apples to oranges here. Both queries do the exact same thing, but are presented through different code.
Your query:
<?php
$my_postid = 663;//This is page id or post id
$content_post = get_post($my_postid);
$content = $content_post->post_content;
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]>', $content);
echo $content;
?>
Merely pulls some content out of the database and dumps it directly to the screen. This other query example you presented:
<?php
// The Query
$the_query =new WP_Query('pagename=my-page-name');
// The Loop
while ( $the_query->have_posts() ) : $the_query->the_post();
?>
<div id="my-id" class="format_text">
<h2 class="page-title"><?php the_title(); ?></h2>
<?php the_content(); endwhile; ?>
</div>
<?php
// Reset Post Data
wp_reset_postdata();
?>
Will also pull some content out of the database, but it runs it through the standard WordPress loop and adds styling to the content. It doesn’t “preserve” the styling.
What I mean
Your code snippet takes some content, passes it through the the_content
filter, and prints the result to the screen.
...
$content = apply_filters( 'the_content', $content );
...
echo $content;
The other code snippet does the exact same thing. The the_content()
function is a wrapper for a bunch of code that gets the content from the database, passes it through the the_content
filter, and prints the result to the screen.
...
$content = apply_filters( 'the_content', $content );
...
echo $content;
The difference between their execution and yours is in the use of standard loop functionality. Here’s how I would rewrite your code to use the same kind of loop functions and templates in the other code:
<?php
$my_postid = 663;
$content_post = get_post( $my_postid );
setup_postdata( $content_post ); // Set up necessary $post globals
?>
<div id="my-id" class="format_text">
<h2 class="page-title"><?php the_title(); ?></h2>
<?php the_content(); ?>
</div>
<?php
wp_reset_postdata(); // Reset $post globals to what they were before
The call to setup_postdata()
will populate the global $post
variable with your selected post’s information. Both the_title()
and the_content()
reference that global variable when they extract information, run it through filters, and print data to the screen.
The call to wp_reset_postdata()
will reset the global $post
variable to whatever it was set for the current request before we started messing with it.
Typically, you’d only call the_title()
and the_content()
from within the loop, but if you set the global $post
variable ahead of time, you can still make them work.