Skip to content

Instantly share code, notes, and snippets.

@Dudo1985
Last active February 5, 2023 08:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Dudo1985/9a75621ffb7cb72b0e910c31ff455e93 to your computer and use it in GitHub Desktop.
Save Dudo1985/9a75621ffb7cb72b0e910c31ff455e93 to your computer and use it in GitHub Desktop.
Filter the_excpert to allow html tags used by YASR shortcodes, basede on https://wordpress.stackexchange.com/a/141136/48442
<?php
remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'yasr_custom_wp_trim_excerpt');
function yasr_excerpt_allowedtags() {
// Add custom tags to show yasr_visitor_votes
return '<div>,<svg>,<span>,<path>';
}
if (!function_exists('yasr_custom_wp_trim_excerpt')) {
function yasr_custom_wp_trim_excerpt($wpse_excerpt) {
$raw_excerpt = $wpse_excerpt;
if ('' == $wpse_excerpt) {
$wpse_excerpt = get_the_content('');
$wpse_excerpt = strip_shortcodes($wpse_excerpt);
$wpse_excerpt = apply_filters('the_content', $wpse_excerpt);
$wpse_excerpt = str_replace(']]>', ']]&gt;', $wpse_excerpt);
/*IF you need to allow just certain tags. Delete if all tags are allowed */
$wpse_excerpt = strip_tags($wpse_excerpt, yasr_excerpt_allowedtags());
//Set the excerpt word count and only break after sentence is complete.
$excerpt_word_count = 75;
$excerpt_length = apply_filters('excerpt_length', $excerpt_word_count);
$tokens = array();
$excerptOutput = '';
$count = 0;
// Divide the string into tokens; HTML tags, or words, followed by any whitespace
preg_match_all('/(<[^>]+>|[^<>\s]+)\s*/u', $wpse_excerpt, $tokens);
foreach ($tokens[0] as $token) {
if ($count >= $excerpt_length && preg_match('/[\,\;\?\.\!]\s*$/uS', $token)) {
// Limit reached, continue until , ; ? . or ! occur at the end
$excerptOutput .= trim($token);
break;
}
// Add words to complete sentence
$count++;
// Append what's left of the token
$excerptOutput .= $token;
}
$wpse_excerpt = trim(force_balance_tags($excerptOutput));
if ($count >= $excerpt_word_count) {
$excerpt_end = ' <a href="' . esc_url(get_permalink()) . '">' . '&nbsp;&raquo;&nbsp;' . sprintf(
__('Read more about: %s &nbsp;&raquo;', 'wpse'), get_the_title()
) . '</a>';
$excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end);
//$pos = strrpos($wpse_excerpt, '</');
//if ($pos !== false)
// Inside last HTML tag
//$wpse_excerpt = substr_replace($wpse_excerpt, $excerpt_end, $pos, 0); /* Add read more next to last word */
//else
// After the content
$wpse_excerpt .= $excerpt_more; /*Add read more in new paragraph */
}
return $wpse_excerpt;
}
return apply_filters('yasr_custom_wp_trim_excerpt', $wpse_excerpt, $raw_excerpt);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment