Как в посте автоматически заменять двойной дефис на тире

Как в посте автоматически заменять двойной дефис на тире | n-wp.ru
Сниппет для functions.php, на лету заменяющий в тексте двойной дефис на тире. Действует только в тех функциях, которые вам нужны.
👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →

Копий в баталиях между противниками приверженцами типографических принципов сломано немало. Я и сам в прошлом много заморачивался этим вопросом — так как я по сути минималист, то зоопарк типографических символов и сложность правил их употребления меня не устраивает. Только в русских правилах типографики существует четыре вида горизонтальных черточек, которые мы называем дефис и тире: дефис, минус, короткое тире и тире. Разница между ними — в длине, но далеко не каждый знает, в каком случае употреблять тот или иной символ этой черточки, чтобы текст был типографически правильным.

Как в посте автоматически заменять двойной дефис на тире

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

Как в посте автоматически заменять двойной дефис на тире

Не многовато-ли? Лично для меня много. Поэтому я придерживаюсь простого правила — употребляю только дефис и тире:

  • Дефис — для случаев употребления двойных, сложных и числительных слов, а так же в качестве математического знака минус. Например, гуси-лебеди, 2008-2015, по-честному.
  • Дефис — как логическая замена слову «это». Например, DM Confirm Email — плагин для подтверждения регистрации по электронной почте.

Лично для меня этого достаточно, чтобы написать грамотный текст в 100% случаев. Думаю, что на этом теоретическую часть можно заканчивать, и начинать практическую. А реалии практического применения таковы, что даже употребление этих двух символов вызывает проблемы.

Дело в том, что дефис (он же минус) на любой клавиатуре есть, а вот никакого тире нет. Чтобы напечатать тире, приходится использовать либо HTML-код, либо набирать специальное сочетание клавиш (что на ноутбуках без дополнительных клавиш и планшетах невозможно), либо использовать специальные программы (типа раскладки Бирмана для MacOS и Type it Easy для Windows).

Как же поступают пользователи WordPress? Подавляющее большинство не употребляют тире, ограничиваясь только дефисом. Отдельные ставят плагины, которые форматируют текст перед его сохранением или выводом. Некоторые продвинутые знают о том, что WordPress заменяет двойной дефис в названии поста автоматически заменяет на тире.

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

Автоматическая замена в WordPress двойного дефиса знаком тире в названии постов явно недостаточна, ведь есть еще множество разделов, содержащих текст — цитаты поста, содержимое поста, раздел Биография в профиле пользователя, различные текстовые виджеты.

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

Для того, чтобы WordPress автоматически заменял двойной дефис [codei lang=»css»]—[] (два дефиса подряд без пробела между ними) на тире [codei lang=»css»]—[], добавьте в файл functions.php используемой вами темы:

function replace_dashes($text = '') {
    $text = str_replace(array(" — ", " — "), " — ", $text);
    return $text;
}

add_filter('comment_text', 'replace_dashes', 20);      // замена в комментариях
add_filter('single_post_title', 'replace_dashes', 20); // замена в названии поста
add_filter('the_title', 'replace_dashes', 20);         // замена в названии поста
add_filter('the_content', 'replace_dashes', 20);       // замена в постах и на страницах
add_filter('the_excerpt', 'replace_dashes', 20);       // замена в цитате поста
add_filter('get_the_excerpt', 'replace_dashes', 20);   // замена в цитате поста
add_filter('bloginfo', 'replace_dashes', 20);          // замена в информации о блоге
add_filter('the_title_rss', 'replace_dashes', 20);     // замена в названии поста в RSS     
add_filter('widget_text', 'replace_dashes', 20);       // замена в текстовом виджете 

Как видите, этот код на лету фильтрует текст, формируемый разными функциями.

Как в посте автоматически заменять двойной дефис на тире

Если вам не нужно менять двойной дефис на тире, например, в комментариях, то закомментируйте соотвтетствующую строчку кода:

//add_filter('comment_text', 'replace_dashes', 20);    // замена в комментариях работать не будет
add_filter('the_content', 'replace_dashes', 20);       // замена в постах и на страницах будет работать

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

Создай свой первый сайт на WordPress

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

Оцените автора
Добавить комментарий