Wordpress plugin and html-as-text (especially for mail)

좋습니다. 여기서 제기하신 문제들을 각각 따로 답변드리겠습니다. 왜 이 문제들을 연결 지으시는지 이해는 하지만, 왜 별개의 문제인지 이해해 주시길 바랍니다.

일반 텍스트 이메일 알림에 포함된 HTML 엔티티

가장 좋은 방법은 이메일 메시지가 다중 부분(multi-part) 구조로, 마크다운을 렌더링한 깔끔한 text/plain 버전과 별도의 text/html 버전으로 구성되는 것입니다.

사실 Discourse의 이메일 알림은 현재 이렇게 작동합니다. Discourse 이메일 알림의 "원본(original)"을 확인해 보시면 텍스트 버전과 HTML 버전이 모두 포함되어 있음을 보실 수 있습니다.

말씀하시는 내용으로 짐작하건대(아직 100% 명확하지는 않지만), Discourse 이메일 알림의 일반 텍스트 버전에서 HTML 엔티티가 표시되고 있다는 것일 텐데, 그 결과 HTML을 지원하지 않는 이메일 클라이언트로 확인하면 이메일 본문에 실제 HTML 엔티티가 그대로 보인다는 말씀이신가요? 그렇다면 HTML을 지원하지 않는 이메일 클라이언트에서 해당 현상을 보여주는 스크린샷을 공유해 주실 수 있을까요?

만약 그렇다면 이는 Discourse 이메일 콘텐츠 생성 및 포맷팅에 특화된 문제이므로, Support 또는 Contribute > Bug 게시판에서 더 구체적으로 다룰 수 있는 별도 토픽으로 분리하는 것이 가장 좋습니다.

Discourse 게시물에 포함된 HTML

여기서 제기하신 문제는 관련성이 높지만, 기술적인 관점에서는 질문의 핵심이 Discourse가 가져온(imported) 콘텐츠를 어떻게 다루는가에 있습니다. 현재 가져온 콘텐츠의 기본 형식은 마크다운이 아닌 HTML입니다.

이 현상을 볼 수 있는 다른 맥락으로는 RSS Polling 플러그인이 있습니다. 이 플러그인도 WP Discourse 플러그인과 마찬가지로 HTML을 게시물 콘텐츠로 가져옵니다. 또한 embed support markdown 사이트 설정은 기본적으로 꺼져 있으며, 게시물 내 임베드된 HTML을 다루는 다른 사이트 설정들(예: allowed embed selectors)도 마찬가지입니다.

여기서는 일부 추측을 섞어 말씀드리지만, Discourse 초기에 가져온 콘텐츠를 다루는 이 전략적 결정이 내려진 가장 그럴듯한 이유는 단순성과 충실성(fidelity)의 조합일 것입니다. 즉, HTML에서 마크다운으로의 변환은 완벽할 수 없기 때문입니다. 아래에서 언급하겠지만, 이에 대한 중요한 예외가 하나 있습니다.

WP Discourse 플러그인은 WordPress 게시물의 HTML을 Discourse로 보내기 전에 마크다운으로 변환하는 시도를 할 수 있습니다. HTML을 마크다운으로 변환하는 기존 PHP 라이브러리가 있긴 하지만, 특히 마크다운의 다양한 변형(flavours)을 고려할 때 마크업 언어 간 변환은 결코 그렇게 간단하지 않습니다.

실제로 WP Discourse 플러그인이 이 변환을 처리하려 하는 것은 오히려 잘못된 접근일 수 있습니다. Discourse에는 이미 커스텀 HtmlToMarkdown 변환기가 존재하기 때문입니다. 현재 이 변환기는 Discourse로 가져온 이메일의 HTML을 마크다운으로 변환하는 역할을 담당합니다. WordPress 게시물의 HTML을 Discourse 마크다운으로 변환하려면 이 변환기를 통해 처리되어야 합니다.

현재 WP Discourse 플러그인은 게시물을 게시하기 위해 Discourse API, 즉 /posts 엔드포인트를 사용합니다. 따라서 사실상 말씀하시는 내용은 Discourse의 /posts 엔드포인트에 HtmlToMarkdown 변환기 지원(예: 선택적 쿼리 파라미터로)을 추가해 달라는 것입니다. 이에 대해 주장(advocate)하실 수 있으며, 만약 구현된다면 WP Discourse 플러그인은 이를 선택적 설정으로 채택하게 될 것입니다.