I’m using the_excerpt on my index page. I’m also using a dropcap shortcode at the beginning of each of my posts. On the index page, the posts will not display the letter with the dropcap shortcode around it. If my post beings with the word “Dog” the index page displays “og”. How do I get shortcodes to work when using the_excerpt?
Shortcode
function drcap ($atts, $content = null) {
return '<div class="dropcap">' . do_shortcode($content) . '</div>';
}
add_shortcode('dropcap', 'drcap');
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Paste this in your theme’s functions.php file
add_filter( 'the_excerpt', 'shortcode_unautop'); add_filter( 'the_excerpt', 'do_shortcode');
Method 2
In the auto-generated excerpt shortcodes will be removed by WordPress:
An auto-generated excerpt will also have all shortcodes and tags
removed. It is trimmed down to a word-boundary and the default length
is 55 words.
Anyhow, if you use the manual excerpt field for your post, it works.
Method 3
Here’s a solution for including shortcode output within WordPress’s auto-generated excerpts:
add_filter('the_excerpt', 'do_shortcode');
remove_filter('get_the_excerpt', 'wp_trim_excerpt', 10);
add_filter('get_the_excerpt', 'my_custom_wp_trim_excerpt', 99, 1);
function my_custom_wp_trim_excerpt($text) {
if(''==$text) {
$text= preg_replace('/s/', ' ', wp_strip_all_tags(get_the_content('')));
$text= explode(' ', $text, 56);
array_pop($text);
$text= implode(' ', $text);
}
return $text;
}
This implementation assumes a word-length of 55.
Hope it helps someone.
Method 4
Also, add these 2 lines to your functions.php file for complete and comprehensive results:
add_filter('get_the_excerpt', 'shortcode_unautop');
add_filter('get_the_excerpt', 'do_shortcode');
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0