Вот фрагмент поста, созданного на сайте обсуждения проекта Fedora из нашего блога сообщества:
<p>Расскажите нам, что вы думаете. Будете ли вы использовать это в качестве главной страницы теперь, когда там есть поле поиска? Как вы думаете, как мы можем улучшить это дальше?</p> <p class="has-text-align-center">ИЛИ</p> <p>Если вы заинтересованы в просмотре большего количества информации, ознакомьтесь с <a href="https://discussion.fedoraproject.org/t/how-do-you-feel-about-the-new-design-of-start-fedoraproject-org-page/28689">черновиком в Figma</a>.</p>
Заметьте, что строки с изображениями в формате Markdown на самом деле не начинаются с новой строки? Из-за этого изображения не отображаются. Если я отредактирую сообщение и добавлю возврат каретки перед каждым ![], изображения отображаются корректно.
Есть ли что-то, что я могу изменить в нашей настройке, чтобы это исправить? Или это просто ошибка в плагине?
Не могли бы вы поделиться ссылкой на оригинальную публикацию в WordPress и на пост в Discourse с фрагментом, если они опубликованы публично?
Плагин WP Discourse по сути просто передаёт любой HTML, найденный в публикации WordPress, в Discourse, который затем обрабатывает его для включения в пост Discourse. Таким образом, то, как HTML отображается в фрагментах постов WordPress в Discourse, зависит от двух вещей:
То, как парсер Markdown в Discourse обрабатывает HTML для отображения в постах Discourse (например).
Так что это либо вопрос структуры HTML в WordPress, который по сути находится вне контроля плагина WP Discourse или самого Discourse, либо в основном вопрос мнения о том, что должен делать HTML-парсер, хотя иногда можно внести явные улучшения в этой области.
Тем не менее, иногда бывает полезно углубиться в детали парсинга, поэтому, если у вас есть дополнительные сведения о структуре HTML публикации WordPress, пожалуйста, поделитесь ими, и я проведу дальнейшее расследование
У меня была похожая проблема в этом посте на Discourse, созданном плагином RSS-опроса (не плагином WordPress):
Символ ™ в первой строке на самом деле был HTML-тегом , и плагин RSS корректно перенёс его. Однако пост был повреждён, когда Discourse выполнил шаг «скачать локальные копии изображений»:
@simonk Спасибо за это полезное расследование. Вы оба можете решить проблему, указав свои домены WP в настройках сайта «disabled image download domains».
Если вы хотите глубже разобраться в проблеме, то есть попробовать решить её автоматизированным способом, то разница между случаем @mattdm и вашим указывает на сложность задачи. Он ожидает, что поведение браузера в отношении HTML-элементов <p> и <img> будет перенесено в виде разрыва строки в markdown, тогда как вы ожидаете почти (но не совсем) обратное, то есть чтобы изображение отображалось во встроенном режиме с теми же размерами, что и существующий элемент <img> в исходном HTML.
Подробнее об этом аспекте проблемы можно узнать в существующих сообщениях, например:
Надеюсь, мы все согласимся, что то, что заставляет Discourse показывать сырую разметку вместо её рендеринга, точно не может быть правильным, особенно когда эта разметка _была создана плагином. Не упускаю ли я что-то здесь?
Изображения будут связаны по прямой ссылке с оригиналами.
Извините, я запутался. Я думал, что вас беспокоит перенос строки? Вы имеете в виду, что опубликованная версия (то есть когда вы просто читаете, а не редактируете) содержит сырой markdown, и это ваша проблема?
Плагин просто отправляет сырой HTML. Markdown генерируется при обработке сообщения в Discourse.
Попробуйте использовать disabled image download domains и посмотрите, как это сработает.
Из-за отсутствия разрыва строки, когда Discourse отображает страницу — для пользователей, а не редакторов —, вместо того чтобы показывать изображения там, где появляется , вы буквально видите этот текст. Человек должен вмешаться и отредактировать пост после его автоматической публикации, добавив разрывы строк перед каждым экземпляром изображения, чтобы они действительно отображались.
Я могу это сделать, но я бы предпочёл, чтобы изображения скачивались — это удобная функция, если другой сайт недоступен, если блог изменится и так далее. И мы ещё далеко от лимита хостинга, так что я не беспокоюсь о месте.
Главное для нас — сохранить целостность контента, поэтому решение с переносом строки, скорее всего, не будет реализовано.
Проблема в том, что если попытаться автоматически исправить описанную вами проблему, это может создать другие сложности. Текущее решение здесь — добавить домен вашего WordPress в настройку сайта запрещённые домены для загрузки изображений.
редактирование: Я сделал небольшое предложение в этом направлении, но оно носит спекулятивный характер, и я ещё раз подчёркиваю, что текущее решение — отключить загрузку изображений для домена вашего WP.
Я действительно не понимаю здесь фундаментальной проблемы. Как текущее поведение обеспечивает целостность контента? Очевидно, что оно этого не делает.
Похоже, что если вы собираетесь заменять HTML на Markdown, то замена его на Markdown, который корректно отображается, — это… единственно верное решение.
Дело не в том, что мы делаем что-то особенное на стороне WordPress — используется обычный редактор блоков, и люди добавляют изображения стандартным способом в WordPress.
Я включу настройку «Отключить загрузку изображений», чтобы посмотреть, поможет ли это, но мне бы очень-очень хотелось, чтобы всё работало просто так.
Я понимаю вашу точку зрения и не утверждаю, что это было бы не идеально, но превращение движка обсуждений, основанного на Markdown, в идеальный движок рендеринга HTML — непростая задача, даже если отдельные случаи кажутся поверхностно простыми (например, просто добавить новую строку).
Возможность отображать полный HTML-код поста блога в Discourse — это приятная функция, но в конечном итоге это лишь одна из многих функций в системе, ориентированной на обсуждения в формате Markdown.
Если вы ознакомитесь с обсуждением, на которое я дал ссылку, включая недавний пост Дэвида, то увидите, что есть несколько возможных путей решения этой проблемы. Один из них может сработать, и он решит именно этот случай. Если бы существовало более простое решение, я бы обязательно создал PR для Discourse, чтобы его реализовать.
Дайте мне знать, если у вас возникнут проблемы с отключением загрузки изображений, и я вместе с вами займусь их решением. Я также сообщу вам, если найдем технически осуществимый путь вперед.