WordPress: difference between get_the_content() an

2020-07-10 06:51发布

问题:

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();?

回答1:

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();


回答2:

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/



标签: php wordpress