WordPress: difference between get_the_content() and 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


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):


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/