Intereting Posts
Пользовательский CSS для формы плагина Запросить сообщения, если мета ключ начинается с WooCommerce Variation Swatches and Photos – получить миниатюру атрибута Различные параметры почтового формата для каждого типа сообщений? Типы запросов нескольких запросов, каждый из которых имеет собственный мета-запрос Последнее сообщение в определенном меню On Multisite: Loop для отображения первых четырех изображений последних сообщений по всей сети Как использовать структуру _S comment_notes_before не работает Просмотр комментариев / оценок (в целом) на странице в виде сетки (кладки) Как изменить новый Sub-блог сразу же, когда супер-администратор создает его? Можете ли вы разместить WordPress с помощью Amazon Web Services, таких как EC2, RDS, EBS и т. Д.? Обновление meta_value в настраиваемом ключе контролирует, прикреплена ли загрузка к сообщению или нет Несколько конечных точек в одном URL-адресе

Как контролировать длину выдержек вручную?

У меня есть веб-сайт, на котором мне нужно контролировать отображаемую длину выдержки. Некоторые из сообщений могут иметь ручную выдержку, поэтому я не могу использовать фильтр excerpt_length .

Я могу, конечно, использовать какой-то substr() , но искал более элегантное решение (если такое существует).

Взгляните на мой ответ здесь: Лучшая коллекция кода для вашего файла functions.php

Если я правильно понял ваш вопрос, он делает то, что вы ищете.

Поместите это в functions.php :

 function excerpt($num) { $limit = $num+1; $excerpt = explode(' ', get_the_excerpt(), $limit); array_pop($excerpt); $excerpt = implode(" ",$excerpt)."... (<a href='" .get_permalink($post->ID) ." '>Read more</a>)"; echo $excerpt; } 

Затем в вашей теме используйте код <?php excerpt('22'); ?> <?php excerpt('22'); ?> чтобы ограничить выдержку до 22 символов.

🙂

В последней версии WordPress (v.3.3.0 +) вы можете фактически использовать wp_trim_words .

 function excerpt($limit) { return wp_trim_words(get_the_excerpt(), $limit); } 

См. Также: https://stackoverflow.com/a/17177847/851045

Я бы сказал, просто посмотрите, как это делается: http://phpxref.ftwr.co.uk/wordpress/wp-includes/formatting.php.source.html#l1840

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

 global $post; if( empty($post->post_excerpt) ){ $text = apply_filters( 'the_excerpt', get_the_excerpt() ); } else { $text = $post->post_excerpt; $text = strip_shortcodes( $text ); $text = apply_filters('the_content', $text); $text = str_replace(']]>', ']]&gt;', $text); $text = strip_tags($text); $excerpt_length = apply_filters('excerpt_length', 55); $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]'); $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY); if ( count($words) > $excerpt_length ) { array_pop($words); $text = implode(' ', $words); $text = $text . $excerpt_more; } else { $text = implode(' ', $words); } } 

Попробуйте следующее: вы можете контролировать количество слов, которые выходят из выходов с помощью фильтра «excerpt_length» ниже, это несколько примеров того, как вы можете контролировать размер на основе разных условий

 add_filter( 'excerpt_length', 'new_excerpt_length' ); function new_excerpt_length( $more ) { if(is_front_page()){ if(has_post_thumbnail()){ return 15; } else { return 45; } } else { return 100; } } 

EDIT: Дерьмо, я только заметил, что вы сказали, что подход фильтра – это не выход. О, хорошо это для других людей, которые попадают сюда через Google и хотят этого.

Просто это можно сделать, как показано ниже.

 function custom_excerpt_length( $length ) { return 20; } add_filter( 'excerpt_length', 'custom_excerpt_length', 999 ); 

Ссылка: Codex

Введите этот код в свои functions.php

 /* easy excerpt limitation */ function easy_excerpt($limit) { $excerpt = explode(' ', get_the_excerpt(), $limit); if (count($excerpt)>=$limit) { array_pop($excerpt); $excerpt = implode(" ",$excerpt); } else { $excerpt = implode(" ",$excerpt); } $excerpt = preg_replace('`[[^]]*]`','',$excerpt); return $excerpt; } 

и используйте echo easy excerpt(mylimit) вместо the_excerpt()
Он работает нормально.