Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Limit the excerpt by number of characters but do NOT truncate the last word. This will allow you to return a maximum number of characters but preserve full words, so only the words that can fit within the specified number limit are returned and allow you to specify the source of where the excerpt will come from.
function get_excerpt($limit, $source = null){
$excerpt = $source == "content" ? get_the_content() : get_the_excerpt();
$excerpt = preg_replace(" (\[.*?\])",'',$excerpt);
$excerpt = strip_shortcodes($excerpt);
$excerpt = strip_tags($excerpt);
$excerpt = substr($excerpt, 0, $limit);
$excerpt = substr($excerpt, 0, strripos($excerpt, " "));
$excerpt = trim(preg_replace( '/\s+/', ' ', $excerpt));
$excerpt = $excerpt.'... <a href="'.get_permalink($post->ID).'">more</a>';
return $excerpt;
}
/*
Sample... Lorem ipsum habitant morbi (26 characters total)
Returns first three words which is exactly 21 characters including spaces
Example.. echo get_excerpt(21);
Result... Lorem ipsum habitant
Returns same as above, not enough characters in limit to return last word
Example.. echo get_excerpt(24);
Result... Lorem ipsum habitant
Returns all 26 chars of our content, 30 char limit given, only 26 characters needed.
Example.. echo get_excerpt(30);
Result... Lorem ipsum habitant morbi
For example, if you have posts that contain text in the_excerpt box on the post editor screen, but want to pull an excerpt from the_content body instead for a special use case you would instead do;
get_excerpt(140, 'content'); //excerpt is grabbed from get_the_content
This tells the function that you want the first 140 characters from the_content, regardless of whether an excerpt is set in the_excerpt box.
get_excerpt(140); //excerpt is grabbed from get_the_excerpt
This tells the function that you want the first 140 characters from the_excerpt first, where no excerpt exists, the_content will be used as a fallback.
The function can be improved to be made more efficient and or incorporated with the use of WordPress filters for both the_content or the_excerpt or simply used as is in situations where there is no suitable, in-built WordPress API alternative.
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.