Flector

Как изменить длину цитаты записи?

Цитата записи

По умолчанию длина цитаты записи ограничена первыми 55 словами (при автоматическом создании цитаты, когда она вручную не указана). В некоторых темах цитаты используются при выводе страниц рубрик или архивов, поэтому если вас не устраивает размер цитаты по умолчанию, то вы можете его легко изменить с помощью следующего кода, вставленного в файл functions.php вашей темы:

//новая длина размера цитаты start
function wph_excerpt_length($length) {
    return 10; 
}
add_filter('excerpt_length', 'wph_excerpt_length');
//новая длина размера цитаты end

Где '10' это новая длина цитаты (в словах).

По умолчанию к цитате добавляются символы '[...]', которые можно легко заменить своим текстом с помощью следующего кода:

//замена [...] в цитатах start
function wph_new_excerpt_more($excerpt) {
    return str_replace('[...]', '...', $excerpt);
}
add_filter('excerpt_more', 'wph_new_excerpt_more');
//замена [...] в цитатах end

При желании символы '[...]' можно заменить ссылкой на запись с анкором "читать дальше...". Для этого надо использовать такой код:

//замена [...] на "читать дальше.." в цитатах start
function wph_new_excerpt_more($excerpt) {
    $plink = get_permalink($post->ID);
    return ' <a href="'. $plink . '">' . 'читать дальше...' . '</a>';
}
add_filter('excerpt_more', 'wph_new_excerpt_more');
//замена [...] на "читать дальше.." в цитатах end

Важно знать, что никакие фильтры на изменение цитаты не будут работать, если вы указали цитату вручную при редактировании записи. В этом случае цитата будет выведена ровно в том виде, в котором вы ее заполнили (даже html-разметка не будет удалена из текста цитаты).


Комментарии (16 комментариев)
  1. А как вывести цитату в анонсах? Наверное, для разных тем по-разному будет.

    • Flector:

      везде одинаково - меняется вывод the_content на the_excerpt и все.

  2. а как сделать так, чтобы вместо цитат был заголовок записи? То есть, чтобы заголовок был справа от миниатюры, а не сверху. А цитату я вообще убрал с помощью вашего кода, не надо лишний раз текст дублировать.

  3. автор видимо устал отвечать бесплатно на мои бесконечные вопросы ))

    • Flector:

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

      • Flector, тогда помогите мне закрыть циклические ссылки, нигде нету нормальной инфы. Обещаю, больше не буду тревожить )) или напишите статью про хук на циклические ссылки. А то бесит, что у меня на главной кнопка главной кликается. да и на рубриках тоже. хотелось бы избавиться.

        • Flector:

          нет никаких хуков.
          да и беды я в циклических ссылках не вижу.
          воспользуйтесь плагином Remove Redundant Links.

        • а зря. нельзя лишний раз гонять робота по этим ссылкам. не должен он на них тратить время. а плагин этот я знаю, но он сильно устарел, и его даже нельзя установить с админки. нету его в поиске.

        • Flector:

          сейчас не 90-е, боты ходить по уже пройденным ссылкам не будут.

  4. Кай:

    Автор, а как вообще удалить все цитаты из под миниатюры? Использую популярный код
    add_filter('the_excerpt', 'my_the_excerpt');
    function my_the_excerpt($more) {
    return '';
    }
    но почему-то не помогает, так как тема весьма специфичная. Я думаю только вы сможете помочь. сайт kriptoarb.ru

  5. Flector:

    судя по коду темы:

    <?php if ( $is_show_excerpt ) { ?>
    	<div class="post-card__content" itemprop="articleBody">
    		<?php
                add_filter('get_the_excerpt', 'remove_the_content_add_ad_filter', 9);
    			echo do_excerpt( get_the_excerpt(), 14 );
                add_filter('get_the_excerpt', 'add_the_content_add_ad_filter', 11);
    		?>
    	</div><!-- .entry-content -->
        <?php } ?>

    выводить или не выводить отрывок записи настраивается в теме (переменная $is_show_excerpt явно об этом говорит). ищите, где оно настраивается.

    • Кай:

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

      • Flector:

        тогда просто удалите этот код.
        он в файле root/template-parts/posts/content-card.php

  6. как предотвратить сохранение поста, если не задан отрывок? Иногда журналисты забывают заполнить цитату (отрывок), и это не есть хорошо. Как можно запретить сохранение поста, если цитата не заполнена? Пусть там будет хотя бы символов 50 - а если их нет, то предотвратить сохранение и указать журналисту на необходимость заполнить отрывок (а даже, возможно, предложить в качестве цитаты первое предложение создаваемого поста, до первой точки)?

Написать комментарий

Для вставки кода воспользуйтесь кнопкой "Код". Используйте предпросмотр!