Проблема с отображением […] вместо [...] в WordPress
У меня возникла проблема с моим сайтом на WordPress - вместо [...] везде отображается [&hellip]. Я изменил кодировку на UTF-8, но проблема осталась. Буду благодарен за любую помощь.
Вот ссылка на сайт: http://theappjuice.com/

Я был крайне раздражён этой проблемой (и разочарован, что автор темы не поделился решением, хотя видно, что на его сайте всё исправлено... Может, он просто сменил тему?).
Кстати, многоточия раньше отображались правильно. Но какое-то обновление, видимо, сломало их.
Мои цитаты выглядели так:
the equipment involved [&hellip
А исходный код отображался так:
the equipment involved [&hellip</p>
Хотя я ожидал увидеть их в таком виде:
the equipment involved ...
Я экспериментировал с formatting.php и default-filters.php, но безрезультатно.
В итоге я предположил, что проблема связана с темой. Может, да, может, нет, но именно там мне удалось её исправить.
Я обнаружил эту функцию в functions.php своей темы:
// Удаление [...]
function trim_excerpt($text) {
return rtrim($text,'[...]');
}
Я обновил её до:
// Удаление [...]
function trim_excerpt($text) {
return $text;
}
Мне не очень хотелось видеть скобки вокруг многоточия, поэтому финальная версия выглядит так:
// Удаление [...]
function trim_excerpt($text) {
$text = str_replace('[', '', $text);
$text = str_replace(']', '', $text);
return $text;
}
Теперь мои цитаты корректно отображают многоточие, по крайней мере, так, как я хотел.
Надеюсь, это поможет тем, кто столкнулся с такой же проблемой.

Чтобы прояснить, почему это произошло, дело в том, что запись rtrim( $text, '[...]' )
, используемая для удаления стандартного многоточия в некоторых темах, некорректна.
Согласно описанию функции trim()
, второй аргумент рассматривается как список символов, а не как строка. Более того, [...
интерпретируется как диапазон символов ASCII от точки (код 2E) до открывающей квадратной скобки (код 5B). Таким образом, вместо подстроки [...]
данный код удаляет любой символ, попадающий в этот диапазон (включая точку с запятой, код 3B), а также закрывающую квадратную скобку.
В WordPress 3.6 [...]
был заменён на […]
для лучшей типографики.
Это не является проблемой само по себе, однако rtrim( $text, '[...]' )
обрезает последние два символа этой строки, оставляя только [&hellip
.
Решение состоит в использовании str_replace( '[…]', '', $text )
для WordPress 3.6+ или str_replace( '[...]', '', $text )
для более ранних версий. Также можно объединить оба варианта замены: str_replace( array( '[…]', '[...]' ), '', $text )
.
