In WordPress, if you want to get just the excerpt of a post, you can use the built-in functions the_excerpt or get_the_excerpt. And if you want all of the content, you can of course use the the_content or get_the_content functions. But what if you want to get everything BUT the excerpt?
The Code
Here is a function that will do that: get_the_content_after_more()
function get_the_content_after_more()
{
$content = get_the_content();
$moretag = preg_match("/\<span id="\"more-[0-9]*\"\">\<\/span\>/", $content, $matches);
if($moretag)
{
$morespan = $matches[0];
$morespan_pos = strpos($content, $morespan);
$newcontent = substr($content, $morespan_pos + strlen($morespan), strlen($content) - strlen($morespan));
$newcontent = apply_filters('the_content', $newcontent);
return $newcontent;
}
else
return "";
}
How to Use This
Notice that this is a “get_” version of the function. So you will get to echo the results or save them to a variable for future use. Just plop an echo get_the_content_after_more() into your LOOP and you’re good to go.
How it Works
The function works by getting the post content through “get_the_content” (and so will give you the content for the current post in your loop) and looking (preg_match) for the span tag that WordPress puts at the more break. (If older versions of WordPress don’t add this tag, this function won’t work. But this works in 2.9-3.0 at least.)
If a more tag is found, I create a variable $newcontent holding everything after the more tag. Then I run it through apply_filters to all of your plugins/etc that work on the_content will work on this.
If a post doesn’t have an excerpt (no excerpt or more tag in the post), the function returns an empty string.
The function could easily be called get_the_inverse_excerpt or get_the_content_after_excerpt or get_the_content_minus_excerpt. Let me know if you have a better idea for this… or tell me what you searched for to figure this out.
Why Would I Use This?
Kim was updating our portfolio page, which is really a list of WordPress posts. She wanted to style the “excerpt” differently from the rest of the content. Notice how the top section (“WineLog is…”) is in a gradient box on the WineLog portfolio item… and then the rest is styled as written in the post content. We used code like this:
<div class="excerpt">
<?php
the_excerpt();
?>
</div>
<?php
echo get_the_content_after_more();
?>
When we decided to do this, I first checked if WordPress was adding some tag around the excerpt that we could piggy back on. Nope. All that is added is a span like at the point where the more break is. Then I looked for a buit-in function or some parameter of the_content that could be used to do this. No luck. (Let me know if there is a built-in way to do this.)
If I Were Updating WordPress…
… and it’s open source. So maybe I will. One could add a parameter to the_content/get_the_content functions to exclude the excerpt. The code would be largely the same, though they could look for the more tag itself since they won’t have that stripped out yet. That feels clunky to me. Let me know if you have better ideas.