Quello che stai cercando si chiama “post decorator”. È un hook che ti permette di eseguire script prima che ogni post venga renderizzato. Fa parte della plugin API.
Ora, riguardo a ciò che vuoi fare (reindirizzare tutti i link esterni). Non penso che aggiungere così tanto attrito sia una buona idea, quindi non posso aiutarti con questo — per di più hai già risolto quella parte. Detto questo, ecco un esempio commentato su come creare una configurazione che individui tutti i link esterni nei post.
Questo va inserito nella sezione header del tuo tema o componente del tema:
<script type="text/discourse-plugin" version="0.8">
// Memorizza il nome host per poterlo riutilizzare.
const siteHostname = location.hostname;
// Creiamo un decorator per farlo in ogni post
api.decorateCooked(
post => {
// Il post contiene link?
const links = [...post[0].querySelectorAll("a")];
// Nessun link, esci.
if (!links.length) return;
// Abbiamo dei link, filtriamoli e prendiamo solo quelli esterni
const externalLinks = links.filter(
link => link.hostname !== siteHostname
);
// Se ci sono link esterni, possiamo fare qualcosa. Ad esempio, possiamo
// aggiungere una classe a ogni link esterno come segue.
externalLinks.forEach(link => {
link.classList.add('external-link');
// Fai altro lavoro qui.
});
},
// Assegniamo un ID al decorator per prevenire perdite di memoria.
{ id: "external-link-decorator" }
);
</script>
Ancora una volta, reindirizzare gli utenti crea troppo attrito e diventerà rapidamente fastidioso. Quindi, ti consiglio di considerare un approccio diverso, come ad esempio aggiungere un’icona sottile accanto ai link esterni e insegnare agli utenti cosa significa?
