Существует случай, когда изображения, публикуемые в Discourse через плагины WP Discourse и RSS, могут быть повреждены. Это может произойти, если полный текст поста публикуется в Discourse с помощью плагина WP Discourse и для публикации используется классический редактор WordPress. Это также может случиться с постами, импортируемыми в Discourse через RSS Polling, если не включена настройка встраивания «Обрезать встроенные посты».
Проблема возникает, когда Discourse пытается загрузить изображения, добавленные в пост. Если загрузка удалённого изображения приводит к тому, что markdown-тег изображения оборачивается в HTML-теги, изображение будет повреждено.
Если посты публикуются из WordPress, проблему следует решить, переключившись с классического редактора на блочный редактор для публикации постов. Если это невозможно или не решает проблему, одним из обходных путей является запрет Discourse на загрузку удалённых изображений.
Если вы знаете домены, с которых публикуются удалённые изображения, вы можете запретить Discourse загружать эти изображения, добавив домен(ы) в настройку сайта «Запрещённые домены для загрузки изображений»:
Если вы не уверены во всех используемых доменах, вы можете запретить Discourse загружать все удалённые изображения, отключив настройку «Загружать удалённые изображения локально». Обратите внимание, что отключение этой настройки может привести к повреждению изображений на вашем сайте. По возможности лучше запретить загрузку удалённых изображений только с конкретных доменов, которыми вы управляете.
Могу ли я попросить уточнить детали? Все мои сайты используют классический редактор, но очень немногие используют плагин для рендеринга Markdown в качестве ввода (пространство плагинов для парсеров Markdown иссякло, поэтому люди чаще всего обращаются к Jetpack).
Речь идёт о случае, когда над классическим редактором используется парсер Markdown?
Однако более простой способ — просто запретить Discourse загружать удалённые изображения с помощью настройки сайта disabled image download domains.
Для постов, публикуемых из WP Discourse через редактор блоков, плагин пытается исправить проблему, обрабатывая пост с помощью следующего кода перед публикацией в Discourse:
Возможно, аналогичное исправление можно реализовать и для классического редактора, но в нём недоступна функция WordPress parse_blocks, поэтому решение будет более сложным. Я надеюсь, что в конечном итоге эта проблема будет решена благодаря изменениям в основном коде Discourse.
У меня тоже была эта проблема с изображениями. Я использовал этот плагин для загрузки изображений локально, и это сломало изображения, как вы объяснили выше. После этого я конвертировал HTML из WordPress в Markdown и вставлял полученный результат в Discourse. Это работает отлично, но вручную.
Возможно ли интегрировать конвертер, чтобы автоматизировать этот процесс при экспорте из WordPress?
Если вы используете редактор блоков WordPress для публикации записей, преобразование должно происходить автоматически. Если вы используете классический редактор, вам потребуется вручную исправить HTML на Discourse, чтобы избежать проблем с отображением изображений.
Сообщите, пожалуйста, если вы используете редактор блоков, но всё ещё сталкиваетесь с проблемами отображения изображений.
Возможно добавить аналогичный функционал для записей, опубликованных с помощью классического редактора, однако код, необходимый для этого, будет сложнее, чем тот, который используется для редактора блоков.
Я использую редактор блоков (Gutenberg), но в него установлены сторонние плагины. Возможно, это вызывает проблему с повреждёнными изображениями. Я также использую несколько сторонних плагинов для галерей на WordPress.
Плагин галереи может быть причиной проблемы. Плагин WP Discourse перед публикацией содержимого поста на Discourse ищет любые blocks в посте, у которых свойство blockName установлено в core/image или core/gallery. HTML-код изображений в этих блоках переписывается в формат, который может быть распознан Discourse.
Возможно, что плагины изображений, используемые на вашем сайте, применяют имена блоков, которые не обрабатываются. Как называется плагин галереи, который вы используете?
Понятно… Я использую это, но только сейчас заметил, что это уже не поддерживается. Поэтому я думаю, что верну изображения к галерее по умолчанию и попробую обновить темы Discourse. Скорее всего, проблема в этом, извините за неудобства.
Я перешёл на Блочный редактор (это нужно сделать в любом случае, так как поддержка Классического редактора закончится в следующем году), но это не исправило проблему. Изображения размещались на Facebook.
Можете ли вы проверить разметку изображений в публикации WordPress, выбрав «Редактор кода» в боковой панели? Меня интересует, в каком именно блоке (если вообще есть) находятся изображения:
Плагин WordPress использует названия блоков для обработки изображений. Если изображение не находится в блоке, который плагин обрабатывает в данный момент, его разметка не будет очищена.
Пост в WP был скопирован из Facebook, вот пример HTML-кода.
Изображения представляли собой эмодзи:
<div dir="auto"><span class="pq6dq46d tbxw36s4 knj5qynh kvgmc6g5 ditlmg2l oygrvhab nvdbi5me sf5mxxl7 gl3lb2sf hhz5lgdu"><img src="https://static.xx.fbcdn.net/images/emoji.php/v9/t34/1/16/1f914.png" alt="🤔" width="16" height="16"></span>Комментарий? У вас есть 1 месяц, чтобы прислать нам свои лучшие стихи и/или рисунки на тему моноцикла, что он вам напоминает, ваша страсть к этому виду спорта и т. д.</div>
У меня в редакторе блоков нет той же боковой панели, что у вас, поэтому я отобразил содержимое блока в виде HTML с помощью этой опции:
Если проблема возникает из-за того, что это не «обычный» контент WP, а HTML, скопированный и вставленный, то это не проблема. Я скажу своим пользователям избегать копирования и вставки изображений, даже эмодзи.
Да, я думаю, что проблема здесь в том, что HTML был скопирован в пост WordPress. Плагин WP Discourse должен справляться с изображениями, добавленными через блок изображений. Он не настроен на исправление HTML для изображений, добавленных любым другим способом.
В идеале Discourse должен был бы обрабатывать HTML-теги изображений, обернутые в другие HTML-теги, но это сложная задача. Возможно, плагин WP Discourse можно обновить, чтобы он поддерживал изображения, добавленные вне блоков изображений. Я надеялся, что работа с блоками изображений покроет большинство случаев, но, похоже, существует множество исключений из этого правила.
Я ознакомился с этой темой и другой основной темой, касающейся изображений.
Опубликование выдержки с моего сайта на Discourse работает безупречно. Однако при нажатии кнопки «Показать полный пост» возникает бесконечный цикл загрузки, и полный пост так и не загружается (да и ничего другого не происходит).
Если я пытаюсь опубликовать полный пост на Discourse, это тоже работает, но с некоторыми особенностями:
изображения не загружаются (именно так я и наткнулся на эти темы);
загружается полный пост (у меня в каждом посте есть несколько кнопок/ссылок, которые могут запутать плагин), но при этом в конце полного поста по какой-то причине также отображается идеально отформатированная выдержка. Другими словами, загружается полный пост (без изображений), а затем в конце поста появляется ещё одна выдержка того же поста.
Одно замечание: мой сайт на WordPress работает в режиме тестирования (staging) и не использует HTTPS. Мой сайт Discourse работает по HTTPS. Я думал, что проблема с загрузкой полного поста может быть связана с тем, что мой сайт находится в режиме тестирования, но другие функции работают нормально (например, принудительное обновление категорий).
Я понимаю, что это сложная проблема. Было бы невероятно сложно заставить плагин корректно форматировать посты других людей, учитывая, что все мы используем разные подходы, и я считаю, что команда Discourse проделала замечательную работу. Я просто пытаюсь найти максимально простое решение. Возможно, стоит просто создать превью (Onebox) ссылки на пост? Хотя бы сам пост (или ссылка на него) появился бы на сайте Discourse, но без синхронизации между сайтами.
Спасибо за любые предложения, которые у кого-либо могут быть.
Проблема может заключаться в том, что Discourse не может найти никакого содержимого на странице WordPress. Хотя я не ожидал, что это вызовет зацикливание. Discourse должен просто молча завершить работу, если не может найти содержимое на странице. На всякий случай, если вы тестируете это с постом без реального содержимого, попробуйте создать пост с некоторым фактическим текстовым содержимым и посмотрите, изменит ли это что-либо. Также вам стоит ознакомиться с инструкцией по настройке параметра «Разрешённые селекторы для встраивания». Параметр «Разрешённые селекторы для встраивания» можно использовать, чтобы помочь Discourse найти содержимое страницы.
Используете ли вы редактор блоков (Block Editor) для публикации постов в WordPress? Если да, то как изображения добавляются в посты? Используете ли вы плагин, который добавляет пользовательские блоки изображений?
Включает ли загружаемое краткое содержание изображения поста?
Я не ожидал, что краткое содержание будет автоматически загружено здесь. Я ожидал, что будет отображена кнопка «Показать полный пост». При нажатии на эту кнопку должно загружаться краткое содержание. Когда полный контент поста публикуется из WordPress в Discourse, вы можете предотвратить отображение кнопки «Показать полный пост», отключив настройку сайта Discourse embed truncate.
Это может стать хорошим решением для вас. Посмотрите Customize the structure of WP Discourse templates для получения подробной информации о том, как настроить шаблон, используемый для публикации постов. Пример шаблона для публикации поста в виде onebox можно найти здесь.
Я попробовал применить ваши предложения, но не смог изменить результат. Вероятно, проблема скорее в моих навыках работы с Discourse, чем в чём-то другом.
Ваше первое предложение заключалось в том, чтобы убедиться, что у поста есть какое-то содержание. У постов действительно было реальное содержание, поэтому я не думаю, что это была проблема. Вы также предложили мне разобраться с настройкой «Как настроить разрешённые селекторы для встраивания», что я тоже сделал, но пока не заметил никаких изменений. Я оставил эту настройку максимально простой и даже добавил теги
и один другой (довольно общий) CSS-класс, но при нажатии «Показать полный пост» всё ещё отображается только «Загрузка».
Я использую редактор блоков. У меня нет специальных плагинов для изображений, но я использую Genesis Blocks. Однако изображение, которое Discourse пытается загрузить, — это главное изображение поста, которое, насколько я знаю, является стандартной функцией WordPress.
Что касается вашего вопроса: «Включает ли загружаемое краткое содержание поста его изображения?» — Нет, пост не содержит никаких изображений. Однако, если я нажму на место, где должно быть изображение, меня перекинет обратно к оригинальной статье.
Я ещё раз изучу вариант с Oneboxing. Спасибо также за ссылки на эту тему.
Это может быть причиной проблемы с этим изображением. Я разберусь с этим.
Не уверен, что может происходить в данном случае. Если ваш сайт на Discourse общедоступен, не могли бы вы поделиться ссылкой на тему с этой проблемой? Вы можете отправить её мне в личные сообщения, если предпочитаете.
Ещё раз спасибо за это. Сайт всё ещё находится на этапе тестирования и не является публичным. Не в этом ли проблема?
Также по какой-то причине не работает функция «Oneboxing». Если я вставляю ссылку, например, с CNN.com, то «Oneboxing» работает отлично, но с моего тестового сайта без HTTPS она просто вставляет ссылку. Не связано ли это с тем, что тестовый сайт не защищён?
То, что сайт Discourse приватный, не должно вызывать проблем. Вы как-то скрываете сайт WordPress? Если сайт WordPress блокирует запросы от Discourse для получения полного содержимого поста, это может стать причиной проблемы.
Сайт на Discourse является публичным. Я бы хотел скрыть его на время разработки, но не смог понять, как настроить его для тестовой среды. У меня есть основной сайт на WordPress, который находится в режиме тестирования/разработки, и этот сайт приватен/скрыт.
Я могу принудительно обновить категорию с помощью плагина для WordPress. Я предполагаю, возможно, ошибочно, что это означает, что Discourse может связываться с основным сайтом, даже если основной сайт находится в тестовой среде.