찾고 계신 것은 포스트 데코레이터(post decorator)입니다. 이는 각 포스트가 렌더링되기 전에 스크립트를 실행할 수 있게 해주는 훅(hook)입니다. 플러그인 API의 일부입니다.
이제, 사용자가 하려는 것(모든 외부 링크를 리디렉션하는 것)에 대해 말씀드리자면, 그렇게 많은 마찰(friction)을 추가하는 것은 좋은 아이디어가 아니라고 생각하므로 그 부분으로는 도움을 드릴 수 없습니다. 게다가 그 부분은 이미 해결하신 것 같습니다. 다만, 게시물 내의 모든 외부 링크를 대상으로 설정을 만드는 방법에 대한 주석이 달린 예제를 여기에 공유합니다.
이것은 테마/테마 구성 요소의 header 섹션에 넣어야 합니다.
<script type="text/discourse-plugin" version="0.8">
// 호스트 이름을 저장하여 재사용할 수 있도록 합니다.
const siteHostname = location.hostname;
// 모든 포스트에서 이를 수행하기 위해 데코레이터를 만들어 보겠습니다.
api.decorateCooked(
post => {
// 포스트에 링크가 있나요?
const links = [...post[0].querySelectorAll("a")];
// 링크가 없으면 종료합니다.
if (!links.length) return;
// 링크가 있으므로, 필터링하여 외부 링크만 가져오겠습니다.
const externalLinks = links.filter(
link => link.hostname !== siteHostname
);
// 외부 링크가 있다면, 작업을 수행합니다. 예를 들어,
// 각 외부 링크에 클래스를 추가할 수 있습니다.
externalLinks.forEach(link => {
link.classList.add('external-link');
// 여기에 더 많은 작업을 수행합니다.
});
},
// 메모리 누수를 방지하기 위해 데코레이터에 id를 부여합니다.
{ id: "external-link-decorator" }
);
</script>
다시 말씀드리지만, 사용자를 리디렉션하는 것은 마찰이 너무 크고 금방 지루해질 것입니다. 따라서 외부 링크 옆에 은은한 아이콘을 추가하고 사용자에게 그 의미를 교육하는 등 다른 접근 방식을 고려해 보시는 것이 좋겠습니다.
