excerpt_length не работает - как исправить

2 апр. 2014 г., 03:16:23
Просмотры: 14.6K
Голосов: 4

Я пытаюсь создать тему и хочу контролировать длину цитат записей, добавив такой код в functions.php:

function theme_excerpt_length( $length ) {
    return 45; // Возвращаем новую длину цитаты - 45 слов
}
add_filter( 'excerpt_length', 'theme_excerpt_length', 999 ); // Добавляем фильтр с высоким приоритетом

Но это не дает желаемого эффекта сокращения цитат до 45 слов. Более того, даже без этой функции некоторые цитаты длиннее стандартных 55 слов. В чем может быть проблема?

2
Комментарии

у этих записей есть произвольное краткое описание, введенное в поле excerpt?

Milo Milo
2 апр. 2014 г. 03:38:59

Нет. Нет произвольного краткого описания.

bodesam bodesam
2 апр. 2014 г. 18:58:33
Все ответы на вопрос 4
0

Есть два быстрых способа отображения пользовательской длины цитат в вашей теме с использованием wp_trim_words. Помните, что если вы используете the_excerpt(), длина цитаты всегда будет ограничена 55 словами, никогда больше. С другой стороны, если использовать the_content(), вы можете указать длину цитаты более 55 слов.

Используйте следующий код для отображения цитаты. Не забудьте заменить get_the_excerpt на get_the_content, если вам нужна цитата длиннее 55 слов, а также заменить <a href="'. esc_url( get_permalink() ) . '">' . '&nbsp;&hellip;' . __( 'Read more &nbsp;&raquo;', 'pietergoosen' ) . '</a> на любой желаемый конец цитаты. В моём примере отображается текст "Читать далее" с названием записи.

function pietergoosen_custom_excerpts($limit) {
    return wp_trim_words(get_the_excerpt(), $limit, '<a href="'. esc_url( get_permalink() ) . '">' . '&nbsp;&hellip;' . __( 'Читать далее &nbsp;&raquo;', 'pietergoosen' ) . '</a>');
}

Теперь просто используйте echo pietergoosen_custom_excerpts($limit); в любом месте ваших шаблонов, где нужно отобразить цитаты. Просто замените $limit на желаемое количество слов, например, echo pietergoosen_custom_excerpts(45); для отображения 45 слов.

РЕДАКТИРОВАНИЕ

Также ознакомьтесь с моим ответом о пользовательских цитатах

2 апр. 2014 г. 06:32:48
1

Это функция, которую я использую для контроля длины анонсов/контента, особенно в ситуациях, когда конечный пользователь вряд ли вспомнит добавить тег <!--more-->, но дизайн темы этого требует.

function 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;
    }

После этого вы можете изменить код вывода анонса в файлах шаблона с: <?php the_excerpt();?>

...на:

<?php echo excerpt(25);?>

где 25 - это количество символов, которое вы хотите отобразить. При разработке тем я предпочитаю использовать символы вместо слов, так как интервалы получаются более последовательными.

2 апр. 2014 г. 04:53:49
Комментарии

Я попробовал это. Длина уменьшается, но не точно до указанного размера анонса. Например, я указал 45, но все равно получил анонс вроде: "Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem ipsum dolor. Lorem..."

bodesam bodesam
2 апр. 2014 г. 19:03:07
1

Если у вас есть пользовательское краткое описание (excerpt), фильтр "excerpt_length" не будет работать для него. Вы можете использовать этот фильтр для обрезки пользовательского excerpt.

function custom_excerpt_length($excerpt) {
    if (has_excerpt()) {
        $excerpt = wp_trim_words(get_the_excerpt(), apply_filters("excerpt_length", 30));
    }
    return $excerpt;
}
add_filter("the_excerpt", "custom_excerpt_length", 999);

Удачи!

29 нояб. 2021 г. 19:24:55
Комментарии

Искал рабочее решение полчаса. Это, кажется, работает, спасибо!

Jameu Lukasli1 Jameu Lukasli1
29 апр. 2022 г. 17:58:52
0

Если вы нашли этот вопрос, потому что используете блок "Цитата" в редакторе Gutenberg и пытаетесь установить для него длину по умолчанию (или любое другое значение, отличное от изначально разрешенного диапазона 10-100 слов), вы можете обнаружить, что фильтр excerpt_length не влияет на блок, и вы даже не можете использовать фильтр the_excerpt для переопределения содержимого цитаты. Это связано с последними обновлениями блока "Цитата" в WordPress.

Однако вы можете использовать следующий код для редактирования настроек по умолчанию блока "Цитата" в Gutenberg:

function filter_metadata_registration( $metadata ) {
    if ($metadata['name'] === 'core/post-excerpt') {
        $metadata['attributes']['excerptLength'] = [
            'type' => 'number',
            'default' => 9999,
        ];
    }
    return $metadata;
};
add_filter( 'block_type_metadata', 'filter_metadata_registration' );

Подробнее об этом: https://core.trac.wordpress.org/ticket/59348

14 сент. 2023 г. 16:01:57