WP Discourse 및 RSS 플러그인을 통해 Discourse에 게시된 이미지가 깨지는 경우가 있습니다. 이는 WP Discourse 플러그인을 사용하여 게시물의 전체 내용을 Discourse에 게시하고, 게시물을 게시할 때 WordPress Classic 편집기를 사용하는 경우 발생할 수 있습니다. 또한 Truncate the embedded posts 임베딩 설정이 활성화되지 않은 상태에서 RSS Polling을 통해 Discourse로 가져온 게시물에서도 발생할 수 있습니다.
이 문제는 Discourse가 게시물에 추가된 이미지를 다운로드하려고 할 때 발생합니다. 원격 이미지 다운로드 결과가 HTML 태그로 감싸인 마크다운 이미지 태그를 생성하면 이미지가 깨집니다.
게시물이 WordPress에서 게시되고 있는 경우, Classic Editor 대신 Block Editor를 사용하여 게시물을 게시하도록 전환하면 이 문제를 해결할 수 있습니다. 이것이 불가능하거나 문제가 해결되지 않는 경우, Discourse가 원격 이미지를 다운로드하지 않도록 하는 것이 문제의 해결책이 됩니다.
원격 이미지가 게시되는 도메인을 알고 있다면, 해당 도메인을 disabled image download domains 사이트 설정에 추가하여 Discourse가 이러한 이미지를 다운로드하는 것을 방지할 수 있습니다:
사용 중인 모든 도메인을 정확히 모르겠다면, download remote images to local을 비활성화하여 Discourse가 모든 원격 이미지를 다운로드하는 것을 방지할 수 있습니다. 이 설정을 비활성화하면 사이트에서 이미지가 깨지는 결과가 초래될 수 있습니다. 가능하다면 자신이 관리하는 특정 도메인에서만 원격 이미지 다운로드를 방지하는 것이 더 좋습니다.
이와 관련하여 더 자세한 내용을 요청할 수 있을까요? 제 사이트는 모두 Classic Editor를 사용하지만, 마크다운을 입력으로 렌더링하는 플러그인을 사용하는 곳은 매우 적습니다(마크다운 파서 관련 플러그인 생태계가 고갈되어, 대부분 Jetpack을 사용하게 됩니다).
하지만 disabled image download domains 사이트 설정을 통해 Discourse가 원격 이미지를 다운로드하는 것을 방지하는 것이 수정하는 더 쉬운 방법입니다.
WP Discourse의 블록 에디터에서 게시된 게시물의 경우, 플러그인은 Discourse에 게시하기 전에 다음 코드로 게시물을 처리하여 문제를 수정하려고 시도합니다:
클래식 에디터에도 유사한 수정 사항을 구현할 수 있을 가능성이 있지만, 클래식 에디터에서는 WordPress의 parse_blocks 함수를 사용할 수 없으므로 수정이 더 복잡해질 것입니다. 궁극적으로 Discourse 코어 코드 변경을 통해 이 문제가 해결되기를 바랍니다.
저도 이미지와 관련하여 같은 문제를 겪었습니다. 위에서도 설명하신 대로, 이미지를 로컬로 다운로드하기 위해 이 플러그인을 사용했는데 그 때문에 이미지가 깨지는 문제가 발생했습니다. 이후 워드프레스 HTML을 마크다운으로 변환한 뒤, 변환된 내용을 디스코스에 붙여넣는 방식으로 해결했습니다. 잘 동작은 하지만 수동으로 해야 한다는 점이 아쉬워요.
갤러리 플러그인이 문제의 원인이 될 수 있습니다. WP Discourse 플러그인은 Discourse에 게시될 게시글 내용을 설정하기 전에, blockName이 core/image 또는 core/gallery로 설정된 blocks를 게시글에서 검색합니다. 해당 블록 내 이미지의 HTML은 Discourse에서 파싱할 수 있는 형태로 다시 작성됩니다.
사이트에서 사용하는 이미지 플러그인이 처리되지 않는 블록 이름을 사용하고 있을 가능성이 있습니다. 현재 사용 중인 갤러리 플러그인의 이름은 무엇인가요?
해당 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>Comment ? Vous avez 1 mois pour nous envoyer vos plus beaux poèmes et/ou dessins sur le thème du monocycle, ce qu’il vous évoque, votre passion pour ce sport, etc.</div>
블록 편집기에서 사용자와 동일한 사이드바가 표시되지 않아, 이 옵션을 사용하여 블록의 HTML 콘텐츠를 표시했습니다:
네, 여기서는 HTML이 WordPress 게시물에 복사된 것이 문제인 것 같습니다. WP Discourse 플러그인은 이미지 블록을 통해 추가된 이미지를 처리할 수 있어야 합니다. 이미지 블록을 제외한 다른 방식으로 추가된 이미지의 HTML을 수정하도록 설정되어 있지 않습니다.
이상적으로는 Discourse가 다른 HTML 태그로 감싸인 HTML 이미지 태그를 처리할 수 있어야 하지만, 이는 까다로운 문제입니다. WP Discourse 플러그인을 업데이트하여 이미지 블록 외부에서 추가된 이미지를 처리하도록 할 수 있을 것입니다. 이미지 블록만 다뤄도 대부분의 경우를 커버할 수 있기를 바랐지만, 그 예외가 꽤 많은 것 같습니다.
제 사이트의 발췌문을 Discourse에 게시하는 것은 완벽하게 작동합니다. 그러나 ‘전체 게시물 보기’ 버튼을 클릭하면 로딩 루프에 들어가는 것 같고, 전체 게시물이 로드되지 않으며(아니면 다른 어떤 동작도 수행되지 않습니다).
전체 게시물을 Discourse에 게시하려고 하면 몇 가지 특이한 현상이 있지만 이 역시 작동합니다:
이미지가 로드되지 않습니다(이것이 바로 이 주제들을 발견하게 된 계기입니다).
전체 게시물이 로드됩니다(각 게시물 내용 내에 플러그인을 혼란스럽게 할 수 있는 여러 버튼/링크가 있습니다) 하지만不知道为什么, 전체 게시물 끝에 완벽하게 포맷된 게시물 발췌문도 함께 로드됩니다. 다시 말해, 전체 게시물(이미지 제외)이 로드된 후, 게시물 하단에 같은 게시물의 발췌문이 또 하나 로드됩니다.
참고할 점: 제 WP 사이트는 스테이징 모드에 있으며 HTTPS가 아닙니다. 제 Discourse 사이트는 HTTPS입니다. 스테이징 사이트 때문에 전체 게시물 로딩에 문제가 생기는 것일 수도 있다고 생각했지만, 다른 기능들은 잘 작동하는 것 같습니다(예: 카테고리 업데이트 강제).
이것이 복잡한 문제라는 점을 이해합니다. 각자가 다른 작업을 수행하고 있는 상황에서 플러그인이 다른 사람의 게시물을 포맷하는 것은 매우 도전적일 것이며, 저는 Discourse 팀이 훌륭한 일을 했다고 생각합니다. 저는 가능한 한 간단한 우회 방법을 찾고 있을 뿐입니다. 아마도 게시물 링크를 Oneboxing하는 것만으로도 될까요? 적어도 게시물(또는 그 링크)은 Discourse 사이트에 있게 되겠지만, 양방향으로 조율되는 상호작용은 없을 것입니다.
문제는 Discourse가 WordPress 페이지에서 콘텐츠를 찾지 못할 수 있다는 것입니다. 이로 인해 루프가 발생하는 것은 아닐 것으로 예상됩니다. Discourse는 페이지에서 콘텐츠를 찾지 못하면 단순히 조용히 실패해야 합니다. 혹시 실제 콘텐츠가 없는 게시물로 테스트하고 있다면, 실제 텍스트 콘텐츠를 가진 게시물을 만들어 보시고 차이가 나는지 확인해 보세요. 또한 허용된 임베드 선택자 설정 구성 방법을 살펴보는 것도 좋습니다. allowed embed selectors 설정을 사용하면 Discourse가 페이지의 콘텐츠를 찾는 데 도움이 됩니다.
WordPress 게시물을 게시할 때 블록 에디터를 사용하고 계신가요? 그렇다면 이미지들은 어떻게 게시물에 추가되고 있나요? 커스텀 이미지 블록을 추가하는 플러그인을 사용하고 계신가요?
로드되는 게시물 발췌문에 게시물의 이미지가 포함되어 있나요?
여기서 발췌문이 자동으로 로드될 것으로는 예상하지 않습니다. 「전체 게시물 보기」 버튼이 표시될 것으로 예상합니다. 해당 버튼을 클릭하면 발췌문이 로드되어야 합니다. WordPress에서 Discourse로 전체 게시물 콘텐츠가 게시될 때, Discourse의 embed truncate 사이트 설정을 비활성화하여 「전체 게시물 보기」 버튼이 표시되지 않도록 할 수 있습니다.
제시해 주신 방법들을 시도해 보았으나 결과는 달라지지 않았습니다. 이는 다른 문제라기보다는 제 Discourse 사용법에 익숙하지 않아서인 것 같습니다.
첫 번째 제안은 게시글에 실제 내용이 포함되어 있는지 확인하는 것이었습니다. 게시글에는 실제 내용이 포함되어 있었기 때문에 이것이 문제라고 생각하지 않습니다. 또한 허용된 임베드 셀렉터(allowed embed selectors) 설정을 구성하는 방법을 안내해 주셨는데, 이 또한 진행했으나 아직 차이를 느끼지 못했습니다. 해당 설정을 매우 간단하게 유지했으며
태그와 다른 (상당히 일반적인) CSS 클래스 하나를 포함시켰지만, 전체 게시글 보기(Show Full Post)를 클릭해도 여전히 로딩 중(Loading)이라고만 표시됩니다.
저는 블록 에디터(Block Editor)를 사용하고 있습니다. 특정 이미지 플러그인은 사용하지 않지만, Genesis Blocks는 사용합니다. 그러나 Discourse가 가져오려는 이미지는 게시글의 대표 이미지(Featured Image)이며, 이는 순수한(버니라) Wordpress 기능이라고 생각합니다.
질문하신 "로드되는 게시글 발췌문에 게시글의 이미지가 포함됩니까?"에 대해 답변 드리면, 아니요, 게시글에는 이미지가 포함되어 있지 않습니다. 그러나 이미지가 표시되어야 하는 위치를 클릭하면 원본 기사로 연결됩니다.
Oneboxing 옵션에 대해 더 자세히 알아볼 예정입니다. 해당 주제에 대한 링크도 공유해 주셔서 감사합니다.
다시 한번 감사드립니다. 사이트는 아직 스테이징 단계이며 공개되지 않았습니다. 이것이 문제가 될 수 있을까요?
또한, 이유를 알 수 없게 Oneboxing이 작동하지 않습니다. 예를 들어 CNN.com에서 링크를 붙여넣으면 Oneboxing이 잘 작동하지만, 제 스테이징 사이트(https가 아닌)에서 링크를 붙여넣으면 그냥 링크만 붙여넣어집니다. 이는 스테이징 사이트가 보안되지 않았기 때문일까요?
Discourse 사이트를 비공개로 설정하는 것만으로는 문제가 되지 않습니다. WordPress 사이트를 어떤 방식으로 숨기고 계신가요? 만약 WordPress 사이트가 Discourse에서 전체 게시물 내용을 가져오려는 요청을 차단하고 있다면, 이로 인해 문제가 발생할 수 있습니다.