WordPress автоматически добавляет " "?
Я не уверен, делает ли это сам WordPress или Tiny MCE. Но при переключении между HTML и визуальным редактором он добавляет
, и добавляет дополнительный символ каждый раз, когда я переключаюсь туда и обратно. У меня даже нет разрыва строки в коде, похоже, он каким-то образом сам решает, куда их поместить, основываясь на тегах в моем HTML-коде.
Что вызывает это и как это исправить?
Я уже пробовал это в файле functions.php шаблона:
//отключить автоматические параграфы
remove_filter ('the_content', 'wpautop');
remove_filter ('comment_text', 'wpautop');
// Отключить автоматическое форматирование
remove_filter('the_content', 'wptexturize');
remove_filter('comment_text', 'wptexturize');
remove_filter('the_title', 'wptexturize');

Я обнаружил, что неразрывные пробелы вставляются, когда я использую два пробела после точки. Редактор, похоже, интерпретирует лишний пробел как мою попытку использовать пробелы для форматирования текста.
Если я скопирую свою статью из редактора WordPress в текстовый редактор, поддерживающий отображение в шестнадцатеричном формате (я использую EditPad Pro), я вижу, что текст, который, как я думал, представляет собой точку с двумя пробелами, на самом деле является текстом с одним пробелом, за которым следует символ Unicode с шестнадцатеричным кодом A0, то есть символ НЕРАЗРЫВНЫЙ ПРОБЕЛ (NO-BREAK SPACE).
Мне удалось удалить неразрывный пробел в существующих статьях, заменив пробел, за которым следует символ НЕРАЗРЫВНОГО ПРОБЕЛА, на обычный пробел. В большинстве текстовых редакторов это можно сделать с помощью поиска и замены, скопировав "два пробела" в поле поиска и вписав один пробел в поле замены.
Я смог избежать этой проблемы в будущем, просто используя только один пробел после точки.

Что вызывает это и как это исправить?
Любое содержимое, добавляемое или удаляемое из вашего контента записи, вызвано tiny_mce_init
, который применяет свои правила фильтрации контента.
Способы предотвратить это:
- Отфильтровать
tiny_mce_init
, чтобы переопределить стандартные правила фильтрации контента - Прекратите переключаться между визуальным и HTML-редакторами. Серьёзно; если вы не хотите использовать вариант №1 выше, не переключайтесь между редакторами. WordPress предназначен для использования таким образом, что контент вводится с помощью визуального или HTML-редактора, но не обоих одновременно.
Пример использования фильтра tiny_mce_before_init
в Codex. Ещё один пример настройки/кастомизации TinyMCE в Codex здесь.

Я почти уверен, что ваш ответ №2 ошибочен. Либо кто-то "накосячил" с интерфейсом.
Если редактор задумывался только для использования в визуальном или HTML-режиме, зачем вообще делать вкладки? Почему бы просто не добавить настройку для выбора одного из режимов?
Более того, вкладки включены по умолчанию... Это не какая-то продвинутая функция для разработчиков, которую нужно отдельно настраивать. Я почти уверен, что они предназначены для переключения между режимами, а реальная проблема в том, что иногда они плохо работают вместе (особенно с пробелами и форматированием).

@luckykind Нет, они не предназначались для переключения туда-сюда. Это архитектурная проблема TinyMCE. И это далеко не единственная проблема.

Нельзя же серьёзно утверждать, что интерфейс с вкладками для переключения между HTML и визуальным редактированием не предназначен для такого использования. Уже почти 2016 год, а проблема всё ещё существует.

Если кто-то до сих пор столкнулся с этой проблемой в 2020 году. У нас возникла эта проблема после переноса большого количества контента в WordPress. Как вы думаете, все просто копировали и вставляли, и в итоге у нас оказалось слишком много контента, чтобы исправлять его вручную. Я реализовал приведенную ниже PHP-функцию, добавил её в functions.php, и это решило нашу проблему.
function replace_content($content) {
$content = htmlentities($content, null, 'utf-8');
$content = str_replace(" ", " ", $content);
$content = html_entity_decode($content);
return $content;
}
add_filter('the_content','replace_content', 999999999)
Число 999999 просто гарантирует, что этот фильтр сработает последним, на случай если эти
добавляются где-то в середине процесса.

Я использую WordPress для блога на иврите.
Обходное решение: Скопируйте текст в редактор, например Sublime или Notepad++, и замените неразрывные пробелы на обычные. Один из них можно скопировать прямо из текста.
Отказ от ответственности: это не совсем ответ, а скорее обходной путь, так что можете смело ставить минусы. У меня WordPress без видимой причины везде добавляет неразрывные пробелы. Не уверен, что вызывает эту проблему. Это происходит с текстом на иврите гораздо чаще, чем с английским текстом.
