Как отключить автоматическую замену кавычек и дефисов в тексте постов, заголовках, комментариях и цитате

По умолчанию WordPress пропускает содержимое и заголовки постов, комменты и цитаты через функцию, заменяющую одни кавычки на другие, дефисы на тире и некоторые другие символы. Исключение составляет содержимое этих HTML-тегов:

<pre> <code> <kbd> <style> <script> <tt>

В них символы не заменяются.

Вот пример замены кавычек, так выглядит содержимое редактора:

кавычки в редакторе WordPress

Кстати, не имеет значения, какая вкладка выбрана в редакторе — «Визуально» или «HTML».

А вот так выглядят кавычки после замены:

измененные кавычке в заголовке и содержимом поста

Таблица замены символов фильтром wptexturize

Порывшись в функции wptexturize(), я составил небольшую таблицу заменяемых символов:

Символ в редакторе Заменяется на В итоге
' &#8216; &#8217; ‘ ’
" &#171; &#187; « »
– (с пробелами по краям) &#8212;
–– &#8212;
––– &#8212;
(tm) &#8482;
... (многоточие) &#8230;
'' (две кавычки рядом) &#187; »
`` &#171; «

Кавычки и тире могут отличаться в зависимости от локализации! То что в таблице — для русской версии WordPress.

Отключение фильтров:

Все четыре следующих сниппета нужно вставлять в functions.php.

Отключение замены символов в содержимом поста:

remove_filter('the_content', 'wptexturize');

В заголовке поста:

remove_filter('the_title', 'wptexturize');

В тексте комментария:

remove_filter('comment_text', 'wptexturize');

В цитате:

remove_filter('the_excerpt', 'wptexturize');

Использование альтернативных функций

Из предыдущих примеров видно, что фильтры применяются для функций the_content(), the_title(), comment_text() и the_excerpt(), поэтому, можно просто заменить их на другие, например функцию the_content() на:

echo get_the_content();

примеры замены остальных трех функций:

echo get_comment_text(); // comment_text()
echo get_the_title(); // the_title()
echo get_the_excerpt(); // the_excerpt()

Функции нужно искать и менять в файлах темы, the_content() вероятно будет находиться в single.php или loop.php и т.д.

Рекомендую быть осторожнее с этим методом, потому что можно потерять и другие фильтры, например у меня после замены the_content() перестали работать шорткоды.

Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

Смотрите также

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

  • Даниил1 января 2013 в 16:01 #

    Кажется это в новых версиях WordPress это уже исправлено

    • Миша1 января 2013 в 17:01 #

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

  • Дмитрий19 июля 2013 в 13:07 #

    Помогите пожалуйста, у меня такая проблема : я странице задаю ярлык цифрой , например " 1 " , то WP сам дописывает "-2" и в результате у меня получается ссылка вот такого вида "1-2" , как это убрать ? почему дописывается"-2 " ?? Заранее спасибо

    • Миша21 июля 2013 в 09:07 #

      WordPress дописывает 2 в том случае, если страница с указанным ярлыком уже существует (возможно в виде черновика)

  • EasyWtS24 февраля 2014 в 23:02 #

    Первый способ не работает:
    Fatal error: Call to undefined function remove_filter() in */wp-includes/functions.php
    Версия WP 3.8.1, PHP 5.5

  • Djet12 ноября 2015 в 18:11 #

    Добавляем все выше указанное в конец файла */wp-includes/functions.php и все работает

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Vladislav: Подправил имеющийся у меня код, по вашим рекомендациям, миниатюры начали отображаться, но они стали очень огромными, что...

  • Миша: Лишь предложил решение. Думаю можно нашаманить и так, чтобы чисто для рубрик было, не уверен только, что обойдётся без и...

  • Алексей: так надо комментарии в рубриках, а не на страницах в category.php а не в page.php

  • Миша: Здравствуйте! Сам WordPress это не поддерживает, но можно пойти хитрым путём. Первое, что пришло мне в голову, это:...

  • Алексей: Миша, здравствуйте! Подскажите, пожалуйста, что нужно, чтобы сделать комментарии на страницах рубрик. Я когда то давно...