Поправляем автоматическое изменение кавычек в WordPress

Как бороться с проблемой автоматической замены кавычек в CMS WordPress? При выводе поста из БД WP автоматически модифицирует текст, делая его, по своему усмотрению, более правильным и пригодным для чтения в вебе. В частности, разные печатные символы трансформируются в HTML сущности (мнемоники), и всё бы хорошо, если бы не одно «но»: кавычки порой изменяются не так как надо. Т.о., в тексте поста появляются кавычки, которые отображаются неверно.

Всё потому, что WordPress просто подставил HTML сущности. Кавычки обычные превратились в т.н. «ёлочки». Это надо исправлять. В Инете много советов на этот счёт, пройдёмся по самым распространённым и основным.

Плагины

Самое быстрое и простое, что можно сделать, это установить и использовать какой-нибудь спец. плагин для этого — напр., плагин «Raw HTML», который позволяет отключить автоматическое форматирование для каждого поста по отдельности. На странице редактирования поста в блоке этого плагина нужно лишь поставить галочку «Disable wptexturize», чтобы отключить всевозможные преобразования, и прежде всего именно кавычек.

Если хочется обойтись без установки доп. плагинов, то можно вручную подредактировать код CMS.

Редактирование кода CMS

Открываем файл «wp-content/themes/название-темы/functions.php» (его можно редактировать и через админку WP), и добавляем в его конец след. код:

if ( function_exists('remove_filter') ) {
	remove_filter('the_content', 'wptexturize'); # Отключение фильтра функцией wptexturize в текстах постов и страниц
	remove_filter('the_title', 'wptexturize'); # Отключение того же фильтра в названиях
	remove_filter('comment_text', 'wptexturize'); # Отключение обработки комментов
}

После сохранения файла преобразований в заданных областях происходить не будет т.к. мы полностью отключили функцию wptexturize, которая и отвечает за эти метаморфозы.

Данный способ может быть неприемлем, т.к. он перевыполняет план решения проблемы. Мы же хотели отключить преобразования только кавычек, а отключили вообще все преобразования, потому что эта функция так же отвечает и за др. спец. символы. Если вас это устраивает, то можете воспользоваться данным методом, если же нет, то идём далее.

Второй более продвинутый способ заключается в непосредственном редактировании самого программного кода функции wptexturize. Для этого проследуем сюда «/wp-includes/formatting.php«. Открываем файл и находим след. строки:
Для двойных кавычек:

/* translators: opening curly double quote */
$opening_quote = _x( '“', 'opening curly double quote' );
/* translators: closing curly double quote */
$closing_quote = _x( '”', 'closing curly double quote' );

И так же для одинарных, если нужно:

/* translators: opening curly single quote */
$opening_single_quote = _x( '‘', 'opening curly single quote' );
/* translators: closing curly single quote */
$closing_single_quote = _x( '’', 'closing curly single quote' );

Там особо искать не придётся т.к. всё описано в самом верху.

Тут можно поступить по-разному, как захотите. Можно просто «закомментировать» эти строки, чтобы они больше не выполнялись, и преобразования кавычек у вас не будет, а можно и заменить код на свой — напр., так:
Для двойных кавычек:

/* translators: opening curly double quote */
$opening_quote = _x( '"', 'opening curly double quote' );
/* translators: closing curly double quote */
$closing_quote = _x( '"', 'closing curly double quote' );

Для одинарных кавычек:

/* translators: opening curly single quote */
$opening_single_quote = _x( ''', 'opening curly single quote' );
/* translators: closing curly single quote */
$closing_single_quote = _x( ''', 'closing curly single quote' );

Теперь вид двойных и одинарных кавычек изменяться не будет, но будут подставляться их HTML сущности (мнемоники), что, по некоторым мнениям, более правильно, с точки зрения корректной HTML вёрстки.

Вы можете заменять свои кавычки т.о. на что угодно.

После изменения файла «formatting.php» обязательно сохраните его локальную копию, т.к. при обновлении WordPress ваш изменённый файл затрётся (перезапишется), и надо будет вновь его менять/заменять, чтобы всё работало, как вы того хотите.