Как убрать неразрывные пробелы в WordPress (не в TinyMCE)?

Ссылка скопирована
1 ответ

Беда с автоматической расстановкой переносов в заголовках и блоках пагинации: WP подкидывает мне в них неразрывные пробелы  . Что неизбежно приводит к растягиванию и выходу за поля. Даже директива hyphens в значении auto справляется только с текстами самих постов, внутри article.

То, что визуальный редактор TinyMCE способен творить всякое, это не новость. Но проблема почему-то проявляется именно в header и nav-links. Наверное где-то ещё, но не в тексте. Отключал все плагины, сносил любой кэш, расставлял в заголовках ­ — не помогает. Вариант (докатился) word-break: break-all; конечно не вариант — дефисов переноса от него не дождёшься.

Судя по массе постов-исследований в интернетах, вопрос заезженный. И всё-таки оставшийся без панацеи.

Спасити-памагити.

Дополнительно:

Для начала расскажи что ты делаешь чтобы они получались. Как и где?

  • Refguser, ничего не приходится делать. Оно само :))

    Я пытаюсь добавить переносы во все текстовые области: hyphens:auto; пока хватает. Но рандомные добавки   между слов в заголовках h1 — это уже критично. Они растягиваются и выходят за пределы блоков. Какая-нибудь «ЭНДОСКОПИЧЕСКАЯ РЕТРОГРАДНАЯ ХОЛАНГИОПАНКРЕАТОГРАФИЯ» рушит всё. Разумеется, в первую очередь экраны мобилок.

    Временно решил победить при помощи <wbr>. Что конечно костыль. Но хотя бы так.

  • ничего не приходится делать. Оно само :))

    Почему же у меня (у десятков моих клиентов) такое "само" не происходит? Ты явно что-то делаешь для этого.

  • Refguser, я здесь как раз для того, чтобы понять — что я делаю не так. Подскажешь?
  • Шигаев., откуда же мне знать что ты делаешь не так? Это я как раз у тебя спрашиваю.
  • Ответы:

    Опубликуйте ссылку тестовой страницы, пожалуйста

    • Я Алень. Сам над собой топорик подвесил: когда-то закинул в футер скрипт, в котором был обязательный &shy; (u00AD). Теперь прибил скрипт и всё заиграло. Сначала вообще грешил на замечательный плагин WP-Typography...
    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Редакция DevOps Ответ

    WordPress сам по себе не должен массово вставлять &nbsp; в заголовки, header и pagination. Чаще всего это делает не ядро, а фильтр темы/плагина: типографика, автоформатирование, SEO-плагин, page builder, функция для “красивых переносов” или кастомный фильтр на the_title, wp_title, paginate_links.

    Первое, что нужно сделать — найти, откуда приходит неразрывный пробел. Временно переключитесь на стандартную тему и отключите плагины типографики/оптимизации текста. Если проблема исчезает, значит виновата тема или плагин, а не WordPress.

    Для диагностики по коду ищите в теме и плагинах:

    grep -R "nbsp" wp-content/themes wp-content/plugins
    grep -R "the_title" wp-content/themes wp-content/plugins
    grep -R "paginate_links" wp-content/themes wp-content/plugins

    grep -R "nbsp" wp-content/themes wp-content/plugins grep -R "the_title" wp-content/themes wp-content/plugins grep -R "paginate_links" wp-content/themes wp-content/plugins

    Если нужно точечно убрать &nbsp; из заголовков, можно добавить фильтр:

    add_filter('the_title', function ($title) {
        return str_replace('&amp;nbsp;', ' ', $title);
    }, 20);

    add_filter('the_title', function ($title) { return str_replace('&amp;nbsp;', ' ', $title); }, 20);

    Но это не решит nav-links. Для пагинации можно обработать вывод:

    add_filter('paginate_links_output', function ($html) {
        return str_replace('&amp;nbsp;', ' ', $html);
    }, 20);

    add_filter('paginate_links_output', function ($html) { return str_replace('&amp;nbsp;', ' ', $html); }, 20);

    Если фильтра paginate_links_output нет в Вашей версии/сценарии, придётся обрабатывать место, где тема вызывает paginate_links().

    С точки зрения CSS, вместо word-break: break-all лучше использовать более мягкие правила:

    .entry-title,
    .nav-links {
      overflow-wrap: anywhere;
      word-break: normal;
      hyphens: auto;
    }

    .entry-title, .nav-links { overflow-wrap: anywhere; word-break: normal; hyphens: auto; }

    Но если в строке стоит неразрывный пробел, CSS не всегда спасёт. Поэтому правильный путь: найти источник подстановки &nbsp; и отключить его. Фильтр str_replace можно оставить как страховку, но не как основное лечение.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно