Intereting Posts
Как передать переменную JavaScript в PHP в WordPress-виджет? Поиск URI в дочерней теме Определите последний дочерний элемент родительского меню WP Nav Walker Как добавить плагин GEO для членства в плагин? Изменение имени типа Custom Post из портфолио в фотографии wp_get_attachment_image_src () с расширенными настраиваемыми полями, возвращающими пустые Показать диалоговое окно в плагине TinyMCE и использовать в нем функции WordPress php Правильный способ работы с wpdb для получения первого имени пользователя Дезактивация разделов / панелей при завершении загрузки Customizer «Временные файлы даты» в папке «Категория» Получение эскизов с другого сайта WP Захват произвольных семантических URL-адресов Динамическое присвоение настраиваемого шаблона настраиваемым сообщениям типа post Ошибка Только переменные могут передаваться по ссылке в wordpress Как заказать только поле времени в расширенных настраиваемых полях

Выдержки, которые не усекают слова

Я знаю, что могу контролировать длину выдержек с использованием фильтра , однако он задает длину по всему миру. В моем случае у меня разная длина выдержек на трех разных страницах.

Это то, что у меня есть сейчас. Я бы хотел улучшить его, чтобы он не обрезал слова.

$content_to_excerpt = strip_tags( strip_shortcodes( get_the_content() ) ); $pos = strpos($content_to_excerpt, ' ', 160); if ($pos !== false) { echo "<p>" . substr($content_to_excerpt, 0, $pos) . "...</p>"; } 

Solutions Collecting From Web of "Выдержки, которые не усекают слова"

Установите фильтр динамически на основе загружаемой страницы. Если в страницах архива категории имеется отрывок из 100 слов, но в сообщениях есть отрывок из 10 слов, а все остальное использует значение по умолчанию:

 function my_custom_excerpt_length( $orig ) { if( is_category() ) { return 100; } elseif( is_single() ) { return 10; } return $orig; } add_filter( 'excerpt_length', 'my_custom_excerpt_length' ); 

Вы можете получить еще более конкретный характер, указав определенные категории на разную длину.


В ответ на Rarst появилась новая функция шаблона the_excerpt_length() для вывода выдержки с определенным количеством слов:

 // Excerpt with a specific number of words, ie the_excerpt( 100 ); function the_excerpt_length( $words = null ) { global $_the_excerpt_length_filter; if( isset($words) ) { $_the_excerpt_length_filter = $words; } add_filter( 'excerpt_length', '_the_excerpt_length_filter' ); the_excerpt(); remove_filter( 'excerpt_length', '_the_excerpt_length_filter' ); // reset the global $_the_excerpt_length_filter = null; } function _the_excerpt_length_filter( $default ) { global $_the_excerpt_length_filter; if( isset($_the_excerpt_length_filter) ) { return $_the_excerpt_length_filter; } return $default; } 

Это будет использоваться в вашем файле шаблона, то есть:

 <div class="entry"> <?php the_excerpt_length( 25 ); ?> </div> 

Я знаю, что раньше видел этот вопрос в StackOverflow. Не относится к выдержке WordPress, но об усечении строк на PHP без усеченных слов. Оглядываясь назад на StackOverflow, я нашел эту ссылку очень полезной по этому вопросу.

Используемый здесь код:

 // Original PHP code by Chirp Internet: www.chirp.com.au // Please acknowledge use of this code by including this header. function myTruncate($string, $limit, $break=".", $pad="...") { // return with no change if string is shorter than $limit if(strlen($string) <= $limit) return $string; // is $break present between $limit and the end of the string? if(false !== ($breakpoint = strpos($string, $break, $limit))) { if($breakpoint < strlen($string) - 1) { $string = substr($string, 0, $breakpoint) . $pad; } } return $string; } 

Надеюсь это поможет!