Intereting Posts
Захват видео в веб-камерах в Buddypress (и BuddyPress Media) Пользовательский тип сообщения игнорируется в запросе Проблема с сериализованными массивами в пользовательской мета Получать комментарии только для определенных пользователей в файле шаблона Как исправить ошибку в цикле WordPress? Как загрузить плагин при вызове Ajax? WordPress: как встроить виджет на отдельный веб-сайт? Заголовки wp_mail и BCC «Попытка получить свойство не-объекта» при использовании WP_Query с «полями» => «идентификаторы» Использование WordPress для создания простого веб-приложения (SaaS) Настройка страницы архива категорий через плагин Изменить метку поля заголовка для сообщений в бэкэнд Дополнительное текстовое поле richtext admin для пользовательского posttype с вкладками панели инструментов? Как вставить или интегрировать пользовательский виджет WordPress в тему? Отключить перенаправление на страницу продукта на странице результатов поиска в WooCommerce

Пользовательская функция wp_trim_words () не обрезается справа

У меня есть эта настраиваемая wp_trim_words() которая дает мне отрывки из 20 слов, и по большей части работает отлично. За исключением некоторых причин, на должностях, содержащих списки, он выводит более 20 слов. ( См. Сообщения внизу этой страницы. ) Как я могу это исправить? Я попытался удалить <ul>,<ol>,<li>, из function insight_allowedtags() но ничего не сделал.

В идеале я хотел бы сделать вывод пользовательского выдержки не менее 20 слов и заканчиваться в конце предложения независимо от того, содержит ли сообщение список.

Это пользовательская функция, которую я использую ( как предложено в этом сообщении ):

 // Custom Excerpt for Insights Posts on Insights Page & Category Pages function insight_allowedtags() { // Add custom tags to this string return '<script>,<style>,<span>,<ul>,<ol>,<li>,<a>,<p>'; } if ( ! function_exists( 'insight_custom_wp_trim_excerpt' ) ) : function insight_custom_wp_trim_excerpt($insight_excerpt) { global $post; $raw_excerpt = $insight_excerpt; if ( '' == $insight_excerpt ) { $insight_excerpt = get_the_content(''); $insight_excerpt = strip_shortcodes( $insight_excerpt ); $insight_excerpt = apply_filters('the_content', $insight_excerpt); $insight_excerpt = str_replace(']]>', ']]&gt;', $insight_excerpt); $insight_excerpt = strip_tags($insight_excerpt, insight_allowedtags()); /*IF you need to allow just certain tags. Delete if all tags are allowed */ //Set the excerpt word count and only break after sentence is complete. $excerpt_word_count = 20; $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', $insight_excerpt, $tokens); foreach ($tokens[0] as $token) { if ($count >= $excerpt_word_count && 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; } $insight_excerpt = trim(force_balance_tags($excerptOutput)); // $excerpt_end = ' <a href="'. esc_url( get_permalink() ) . '">' . 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 $insight_excerpt .= $excerpt_end; /*Add read more in new paragraph */ return $insight_excerpt; } return apply_filters('insight_custom_wp_trim_excerpt', $insight_excerpt, $raw_excerpt); } endif; remove_filter('get_the_excerpt', 'wp_trim_excerpt'); add_filter('get_the_excerpt', 'wpse_custom_wp_trim_excerpt', 'blog_custom_wp_trim_excerpt', 'event_custom_wp_trim_excerpt', 'insight_custom_wp_trim_excerpt');