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

4 янв. 2011 г., 13:58:15
Просмотры: 22.5K
Голосов: 6

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

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

0
Все ответы на вопрос 6
2

Посмотрите мой ответ здесь: Лучшая подборка кода для вашего файла 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) ." '>Читать далее</a>)";
    echo $excerpt;
}

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

:)

4 янв. 2011 г. 16:43:52
Комментарии

Ваша функция должна использовать целое число, а не строку, для передачи числовых значений, или можно преобразовать внутри функции, например: $num = (int) $num;. '1' != 1 .. :)

t31os t31os
4 янв. 2011 г. 17:46:40

Это всё ещё считается лучшей практикой? Или сейчас есть более эффективный подход?

Lewis Lewis
9 мар. 2019 г. 19:18:42
0

С последней версией 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

16 июл. 2014 г. 21:41:30
0

Я бы посоветовал просто посмотреть, как это реализовано в ядре WordPress: 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);
  }
}
4 янв. 2011 г. 16:27:22
0

Это можно просто сделать следующим образом:

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

Ссылка: Кодекс

13 мар. 2015 г. 07:38:07
0

Попробуйте так: Вы можете контролировать количество слов в отрывке с помощью фильтра "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;
    }
}

РЕДАКТИРОВАНО: Чёрт, я только сейчас заметил, что вы сказали, что подход с фильтром не подходит. Ну ладно, пусть это будет для других людей, которые найдут это через Google и захотят такой вариант.

24 июн. 2013 г. 01:22:55
2
-1

Вставьте этот код в ваш файл functions.php

/* Простое ограничение для цитат (excerpt)
 */
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(мой_лимит) вместо the_excerpt()
Работает отлично.

8 окт. 2015 г. 21:13:39
Комментарии

Пожалуйста, опубликуйте настоящее решение

Pieter Goosen Pieter Goosen
8 окт. 2015 г. 21:28:04

Вам следует правильно форматировать свой код для удобочитаемости, проверьте раздел помощи по форматированию ;-)

Pieter Goosen Pieter Goosen
8 окт. 2015 г. 22:40:01