Yesterday, I wrote a simple plugin for Deluxe Blog Tips to show a “giveaway” widget in the sidebar. That widget will get the content before more tag of the giveaway post and show it. The problem is that the excerpt functions, that we often use to get that content such as the_excerpt() or the_content( $more ), don’t work! After digging more into WordPress core I found a solution, and in this post I’ll show you how to get the content before more tag that works in any situation!

More Tag

First, let’s go through 2 common approaches that we often use:

Using the_excerpt() function

This function checks for $post->post_excerpt (the content you entered in the Excerpt meta box under main editor) and display that value. Unfortunately, I don’t use post excerpt. So that fails.

Using the_content() function

This function works nearly perfectly:
– In single post page, it shows all content
– In non-single post page, it shows the content before more tag

As you see it doesn’t work consistently. I want it display the content before more tag always! I need another solution.

My own hack for more tag

When I looked into the code of get_the_content() function (it’s used internally inside the_content()), I found that the function uses a global variable $more to check whether or not display the full content.

So what I need to do is changing the value of this variable to false to force get_the_content() function always returns the content before more tag, and after displaying just reset it.

The code snippet is quite simple as follow:

global $more;
$temp = $more;
$more = false;
echo '<div class="giveaway-excerpt">' . get_the_content( '' ) . '</div>';
$more = $temp;

Now the content displayed is only the content before more tag. No extra function to strip content, no regular expression to extract content, … We just use the built-in WordPress function to do to that.

5 Comments

  1. Unfortunally get_the_content() return ad unformatted string. As per codex: “This means that get_the_content() will not auto-embed videos or expand shortcodes, among other things.” (< other 'things' are paragraphs, for example!)

Leave a Reply