I was working on the new theme in the WordPress and spent tons of time with the get_the_content() function.
<div class="clearfix">
<div>
<p><?=get_the_content();?></p>
</div>
</div>
Seems that it doesn't process shortcuts and doesn't do paragraphs.
Then I replaced it with the the_content(); and my paragraphs and shortcuts started to work.
<div class="clearfix">
<div>
<p><?=the_content();?></p>
</div>
</div>
My question: What is the difference between the functions and what additional processing the_content(); does comparing to get_the_content();?
While @J Quest provided an adequate answer, I'd like to elaborate a little bit. Generally speaking, WordPress has two types of post variable functions: get_
functions and the_
functions.
get_
functions, such as get_the_content()
or get_the_ID()
will return the desired information, which must then be manipulated and printed to the page. Some examples:
$content = get_the_content();
$content = apply_filters( 'the_content', $content );
$content = str_replace( 'foo', 'bar', $content );
echo 'Post #'. get_the_ID() . $content;
the_
functions, such as the_content()
and the_ID()
actually echo
the returned value, and if applicable will apply the "default filters" for the appropriate values. These functions don't need to be echoed.
echo get_the_ID();
is functionally the same as
the_ID();
If you look at the docs for the_ID()
you'll see it literally just outputs the value of get_the_ID()
. From the source:
function the_ID() {
echo get_the_ID();
}
In that vein, if you try and set the_
functions as a variable, you'll leave a trail of echoed variables throughout the page.
$id = the_ID();
echo 'Post ID: '.$id;
will output:
123Post ID: 123
To use get_the_content()
and get shortcodes to run, you'll either need to run it through the do_shortcode()
function, or better yet the_content
filter.
$content = get_the_content();
echo do_shortcode( $content );
// Or:
echo apply_filters( 'the_content', $content );
If you just need to spit out post content in a template, without any manipulation, you're typically better off with (no echo or echo short tag):
the_content();
get_the_content()
does not pass the content through the_content
. Which means that it does not auto-embed videos, or expand shortcodes, among other things.
Just use get_the_content()
and it will remove those tags.
https://codex.wordpress.org/Function_Reference/get_the_content
https://developer.wordpress.org/reference/functions/the_content/