Удаление текста [...] из короткой записи
Я использую тему, которая имеет ограничение по количеству символов для короткой записи и показывает [...] в конце ограничения символов.
Я хочу убрать это, поэтому ищу the_excerpt();
и заменяю на the_content();
Проблема решается с обычным контентом, но всё ещё остается проблема с записями типа изображений, и там есть <?php the_excerpt(); ?>
, и когда я меняю это, моя короткая запись ведет себя как полная запись, и это не связано с длиной поста.
Я пытаюсь открыть все PHP файлы в теме и ищу ключевые слова, такие как: limit, length, excerpt, чтобы найти код, который определяет длину короткой записи, даже искал "[...]" во всех файлах и языках, но я не знаю, откуда это берется.
Всё, что я нашел, это несколько строк кода в function.php
if ( ! function_exists( 'string_limit_words' ) ) :
function string_limit_words($str, $limit = 18 , $need_end = false) {
$words = explode(' ', $str, ($limit + 1));
if(count($words) > $limit) {
array_pop($words);
array_push($words,'...');
}
return implode(' ', $words);
}
endif;
И когда я увеличиваю 18, ничего не меняется!
Какой код я должен искать?

Кодекс — ваш друг и должен быть первой остановкой :-)
Символы [...]
добавляются функцией the_excerpt()
. Для настройки текста "Читать далее" после цитаты предусмотрен специальный фильтр под названием excerpt_more
.
Чтобы убрать [...]
после текста цитаты, вы можете сделать следующее:
function new_excerpt_more( $more ) {
return '';
}
add_filter('excerpt_more', 'new_excerpt_more');

спасибо за ответ
ваш код хорошо работает для удаления [...], но посты всё равно обрезаются и слова обрываются после определённого количества символов
Я хочу нормальное поведение (чтобы в кратком отображении поста показывалось всё, что находится до тега "читать далее")

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

Вам стоит прочитать этот пост. Я описал там практически всё. Надеюсь, это поможет :-). Не забудьте принять мой ответ, если он помог решить вашу проблему.

это, кажется, удаляет только ссылку "читать далее". Символы [...]
всё ещё остаются.

Как уже отметили другие, использование хука фильтра excerpt_more
— это правильный подход.
Хотел добавить, что вам не обязательно писать функцию, возвращающую пустую строку. В WordPress есть несколько встроенных функций для возврата true, false, нуля, null, пустой строки или пустого массива.
В данном случае нам нужна __return_empty_string()
Вы можете добавить этот код в ваш плагин или в файл functions.php вашей темы:
<?php
// Это добавит фильтр на `excerpt_more`, который возвращает пустую строку.
add_filter( 'excerpt_more', '__return_empty_string' );
?>

Вам следует добавить это в ваш functions.php
function custom_excerpt_more( $more ) {
return '';//вы можете изменить это на что угодно
}
add_filter( 'excerpt_more', 'custom_excerpt_more' );
Также, использование the_excerpt
имеет преимущество в том, что оно автоматически очищает контент, удаляя все изображения и другие HTML-теги.
Вы можете прочитать больше здесь
Если вы также хотите изменить длину анонса, вы можете добавить этот сниппет в ваш functions.php
:
function custom_excerpt_length( $length ) {
return 20;//измените число на желаемую длину
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );
Вы можете прочитать больше об этом здесь

ваш код хорошо работает при изменении длины, но когда я убираю [...], это выглядит некрасиво, когда часть абзаца кажется отсутствующей
было бы здорово, если бы можно было как-то определять абзац вместо длины!!
// еще одна проблема с отрывками касается шорткодов - я не могу добавить видеоплеер или слайд-шоу в свой короткий пост

@Arioman, вы можете заменить [...] ссылкой с текстом "Читать далее" или любым другим текстом. Если же вам нужны рабочие шорткоды, то the_excerpt
не то, что вам нужно. Следует уточнить этот момент в вопросе, так как ответы будут другими.

@TomásCot, спасибо за это замечательное руководство. Я поместил все коды (полный код) в свой function.php и удалил строку $wpse_excerpt = strip_tags($wpse_excerpt, wpse_allowedtags()); чтобы разрешить все теги. Я использую видеоплеер stream для вставки видео, и он генерирует шорткоды вида: [stream flv=http://***/clip/shad.m4v embed=false share=false width=640 height=360 dock=true controlbar=over bandwidth=high autostart=false responsive=16:9 /] Но вместо отображения видеоплеера в кратком посте я получаю текст: Видео: мое видео. В чем моя проблема?

это работает для меня!
function change_excerpt( $text )
{
$pos = strrpos( $text, '['); // Находим последнее вхождение символа '['
if ($pos === false) // Если символ не найден
{
return $text; // Возвращаем исходный текст
}
return rtrim (substr($text, 0, $pos) ); // Возвращаем текст до последнего '[', обрезая пробелы справа
}
add_filter('get_the_excerpt', 'change_excerpt'); // Применяем фильтр к цитатам

'excerpt_more' — это хук WordPress. Он возвращает сокращённый вариант контента (эксперт).
Чтобы убрать многоточие [...] после текста эксперта, можно вернуть пустую строку, как показано ниже, или реализовать свои требования. Используйте этот код в файле function.php
function custom_excerpt_more( $excerpt ) {
return '';
}
add_filter( 'excerpt_more', 'custom_excerpt_more' );
