add_filter на «the_excerpt» работает только тогда, когда сообщение не имеет выдержки

class my_menu extends WP_Widget { function widget($args, $instance) { // Excerpt length filter $new_excerpt_length = create_function('$length', "return " . $excerpt_length . ";"); if ( $instance["excerpt_length"] > 0 ) { add_filter('excerpt_length', $new_excerpt_length, 999); } //... }} 

Этот фильтр отлично работает, если сообщение не содержит выдержки. Как применить тот же фильтр к сообщению, в котором есть отрывок?

Другими словами, когда сообщение имеет фактический отрывок, его не фильтрует его вообще, отображается весь отрывок. Однако, когда сообщение не имеет выдержки, вызов get_the_excerpt () фильтруется так, что он возвращает только количество слов, указанных в «excerpt_length»,

Я опубликовал статью об этом некоторое время назад:

 function wp_trim_all_excerpt($text) { // Creates an excerpt if needed; and shortens the manual excerpt as well global $post; $raw_excerpt = $text; if ( '' == $text ) { $text = get_the_content(''); $text = strip_shortcodes( $text ); $text = apply_filters('the_content', $text); $text = str_replace(']]>', ']]>', $text); } $text = strip_tags($text); $excerpt_length = apply_filters('excerpt_length', 55); $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]'); $text = wp_trim_words( $text, $excerpt_length, $excerpt_more ); return apply_filters('wp_trim_excerpt', $text, $raw_excerpt); } remove_filter('get_the_excerpt', 'wp_trim_excerpt'); add_filter('get_the_excerpt', 'wp_trim_all_excerpt');