Настройка get_the_excerpt() для определенной длины и вывода "Читать далее"

5 дек. 2012 г., 20:40:08
Просмотры: 24.4K
Голосов: 6

Я настраиваю шаблон. Есть список, который берет вступление из первых 1-2 абзацев (все статьи из категории). Если я устанавливаю длину отрывка в 295 слов, иногда список захватывает дополнительные слова из следующего абзаца. Я хотел бы добавить тег "Читать далее", чтобы остановить это. Может кто-нибудь помочь с этой частью?

<div id="all-div-cabrand-content-stories">
    <div class="kids-families-con-cabrand-stories">
        <?php echo get_the_post_thumbnail($page->ID, 'thubmnailstorysmall'); ?>
    </div>
    <div class="kids-con-cabrand-new-stories">
        <span>
            <?php print substr(get_the_excerpt(),wp_trim_excerpt(),295); ?>
            <i><a style="color:#1975D1;float:Right;" class="title" href="<?php the_permalink() ?>" rel="bookmark">Перейти к статье и видео</a></i>
            <br/>
        </span>
    </div>
</div>
0
Все ответы на вопрос 5
1

Для получения текста определенной длины можно использовать функцию wp_trim_words. Она принимает 3 параметра.

  1. Текст для обрезки. Например: get_the_content()
  2. Количество слов. Например: 295
  3. Что добавить в конец текста. Например: '' означает ничего.

Используйте так:

<span>
    <?php echo wp_trim_words( get_the_content(), 295, '' ); ?>
    <i><a style="color:#1975D1;float:Right;" class="title" href="<?php
        the_permalink() ?>" rel="bookmark">Читать статью & Смотреть видео</a></i>
    <br/>
</span>
6 авг. 2016 г. 22:21:59
Комментарии

Объяснение того, что делает ваш код и как он отвечает на вопрос, улучшит ваш ответ.

Gabriel Gabriel
6 авг. 2016 г. 22:58:19
0

Вы можете извлечь первый или два абзаца с помощью регулярного выражения (regexp)

function custom_excerpt( $content = '' ){

    if( empty( $content ) )
        return $content;

    $result = '';
    $matches = array();

    // извлекаем все абзацы из $content
    preg_match_all( '#<\s*p[^>]*>(.*?)<\s*/\s*p>#ui', $content, $matches );

    if( ! empty( $matches ) ){

        // добавляем первый абзац
        $result = $matches[0][0];

        // добавляем второй абзац, если он есть
        if( isset( $matches[0][1] ) )
            $result .= $matches[0][1];

        // устанавливаем длину анонса
        add_filter( 'excerpt_length', 'custom_excerpt_length' );

        // создаем кастомный анонс
        $result = custom_trim_excerpt( $result );

    }

    return $result;

}

function custom_excerpt_length(){

    return 295;

 }

function custom_trim_excerpt( $text = '' ){

    $text = strip_shortcodes( $text );

    $text = apply_filters('the_content', $text);
    $text = str_replace(']]>', ']]&gt;', $text);
    $excerpt_length = apply_filters('excerpt_length', 55);
    $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
    $text = wp_trim_words( $text, $excerpt_length, $excerpt_more );

    return $text;
}

Вызовите функцию с помощью

<?php print custom_excerpt( get_the_content( 'Читать далее' ) ); ?>

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

6 дек. 2012 г. 00:53:44
1

Вы можете использовать эту функцию:

function get_excerpt_trim($num_words='20', $more='...'){
    $excerpt = get_the_excerpt();
    $excerpt = wp_trim_words( $excerpt, $num_words , $more );
    return $excerpt;
}

https://codex.wordpress.org/Function_Reference/wp_trim_words

22 мар. 2018 г. 17:34:17
Комментарии

Отлично, работает идеально

Nuno Sarmento Nuno Sarmento
18 февр. 2021 г. 17:51:18
1

Вы можете использовать встроенную функцию

// Изменяем длину анонса
function custom_excerpt_length( $length ) {
    return 20; // Возвращаем 20 слов вместо стандартных 55
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

http://codex.wordpress.org/Function_Reference/the_excerpt

16 мар. 2015 г. 13:58:37
Комментарии

Добро пожаловать в WPSE Vee. Если вы перечитаете вопрос, то заметите, что это не совсем ответ на заданный вопрос. Но в любом случае спасибо за попытку и снова добро пожаловать в WPSE!

kraftner kraftner
16 мар. 2015 г. 14:41:09
0

Чтобы получить желаемый результат, вам нужно сделать две вещи.

1) Установить пользовательскую длину цитаты (в словах, а не в символах), что лучше всего достигается, следуя этому ответу.

2) Просто вызовите wp_trim_excerpt(), не оборачивая его в substr

Ваша строка кода выше не делает то, что вы ожидаете. Я полагаю, она возвращает первые 295 символов цитаты, но я не совсем уверен, что функция php substr() сделает, когда вы передадите ей строку в качестве второго аргумента, хотя она ожидает целое число.

5 дек. 2012 г. 21:57:45