I saw this and was thrilled:
Then I installed it, and realized that it still only works for Amazon. Would it be hard to add support for ShareASale? Maybe even a “generic” rewrite where you regex an URL and do a replacement?
I saw this and was thrilled:
Then I installed it, and realized that it still only works for Amazon. Would it be hard to add support for ShareASale? Maybe even a “generic” rewrite where you regex an URL and do a replacement?
So che questo è del '16, ma non riesco a trovare una risposta e sto cercando qualcosa di simile. Esiste un plugin che consenta una riscrittura “generica” di un URL inviato dai membri della community, ad esempio aggiungendo un tag affiliato o modificando il link da quello inviato dall’utente a uno affiliato?
Non che io sappia, ma sono interessato a sapere se ci sono stati sviluppi in merito ![]()
Questo dovrebbe essere possibile in un componente del tema al giorno d’oggi, a seconda di come dovrebbero apparire i link.
Puoi pubblicare un esempio del link di base e un esempio di come apparirebbe come link affiliato?
Questa discussione è terminata prematuramente. Potrei dover ripensare alla monetizzazione della nostra community.
Nel mio caso, avrei bisogno di aggiungere un prefisso a un URL.
http://merchantxyz.com/....
e convertirlo in…
https://tracker.adagency123.com/t/t?a=12345678&as=87654321&t=2&tk=1&url=https://merchantxyz.com/...
Ci sono diversi argomenti che trattano questo problema, ma esiste davvero una soluzione pronta per la produzione?
Purtroppo non credo di sì. Probabilmente questo sarebbe un ottimo candidato per un lavoro su Marketplace.
Sarebbe possibile implementarlo come personalizzazione del tema? Sto valutando di modificare questo JSFiddle, ma qual sarebbe il modo corretto per implementarlo in un’istanza di Discourse, se possibile?
// Sostituisci "my-affiliate-id" qui sotto con il tuo vero ID affiliato
const aid = 'my-affiliate-id';
// Aggiungi una barra e l'ID affiliato solo se l'ID affiliato non è già presente nel link
const goglinks = document.querySelectorAll('a[href*="gog.com"]');
goglinks.forEach(function(el) {
if(!el.href.includes('pp=')) {
el.href = el.href.replace(/\?.*$/, '') + '?pp=' + aid
}
})
Sì, è possibile. Iniziamo con qualcosa di semplice. Prima di tutto, aggiungi questo alla scheda Intestazione di un nuovo componente del tema.
<script type="text/discourse-plugin" version="0.8.42">
</script>
Cosa fa? Si tratta di un tipo speciale di tag script gestiti da Discourse. Qual è il vantaggio? Consente di accedere ai metodi dell’API dei plugin.
Vuoi aggiungere un codice affiliato ad alcuni link. Questo significa che devi modificare il contenuto dei post. Se controlli l’API dei plugin, vedrai che esiste effettivamente un metodo per farlo.
Lo utilizzi in questo modo.
api.decorateCookedElement(
element => {
// esegui qui le tue operazioni.
// l'elemento passato qui è il nodo HTML del post elaborato
},
{
// le opzioni vanno qui
}
);
Questo è il contenitore in cui devi inserire il tuo codice affinché venga eseguito quando un post viene renderizzato. Proviamo quindi.
Prendiamo il tuo codice e lo aggiungiamo così com’è.
api.decorateCookedElement(
element => {
++ // Sostituisci "my-affiliate-id" qui sotto con il tuo vero ID affiliato
++ const aid = "my-affiliate-id";
++
++ // Aggiungi lo slash con l'ID affiliato solo se non è già presente nel link
++ const goglinks = document.querySelectorAll('a[href*="gog.com"]');
++ goglinks.forEach(function (el) {
++ if (!el.href.includes("pp=")) {
++ el.href = el.href.replace(/\?.*$/, "") + "?pp=" + aid;
++ }
++ });
},
{
// le opzioni vanno qui
}
);
Funziona? Sì, ma sta anche eseguendo del lavoro ridondante, poiché stiamo interrogando il document per i link invece dell’elemento del post. Come si risolve questo problema?
Ricordi l’argomento element che abbiamo passato nel metodo? Ecco quando diventa utile.
Invece di interrogare il documento, interroghiamo l’elemento che vogliamo targettizzare. Quindi, cambiamo questo.
const goglinks = document.querySelectorAll('a[href*="gog.com"]');
in questo
const goglinks = element.querySelectorAll('a[href*="gog.com"]');
e ecco cosa otteniamo alla fine.
api.decorateCookedElement(
element => {
// Sostituisci "my-affiliate-id" qui sotto con il tuo vero ID affiliato
const aid = "my-affiliate-id";
// Aggiungi lo slash con l'ID affiliato solo se non è già presente nel link
-- const goglinks = document.querySelectorAll('a[href*="gog.com"]');
++ const goglinks = element.querySelectorAll('a[href*="gog.com"]');
goglinks.forEach(function (el) {
if (!el.href.includes("pp=")) {
el.href = el.href.replace(/\?.*$/, "") + "?pp=" + aid;
}
});
},
{
// le opzioni vanno qui
}
);
Ora funziona perfettamente, ma possiamo ancora migliorarlo un po’. Dato che stai solo aggiungendo un ID affiliato ai link, non hai bisogno che questo codice venga eseguito quando sei nell’editor. È qui che entrano in gioco le opzioni del metodo.
Una delle opzioni che puoi passare al metodo è onlyStream.
Cosa fa? Indica al metodo che vuoi che questo codice venga eseguito solo quando il post viene renderizzato all’interno di un argomento. Aggiungiamo quell’opzione.
api.decorateCookedElement(
element => {
// Sostituisci "my-affiliate-id" qui sotto con il tuo vero ID affiliato
const aid = "my-affiliate-id";
// Aggiungi lo slash con l'ID affiliato solo se non è già presente nel link
const goglinks = element.querySelectorAll('a[href*="gog.com"]');
goglinks.forEach(function (el) {
if (!el.href.includes("pp=")) {
el.href = el.href.replace(/\?.*$/, "") + "?pp=" + aid;
}
});
},
{
++ onlyStream: true
}
);
Quindi, ora l’unica cosa da fare è inserire questo codice nel tag script speciale di cui abbiamo parlato prima.
<script type="text/discourse-plugin" version="0.8.42">
api.decorateCookedElement(
element => {
// Sostituisci "my-affiliate-id" qui sotto con il tuo vero ID affiliato
const aid = "my-affiliate-id";
// Aggiungi lo slash con l'ID affiliato solo se non è già presente nel link
const goglinks = element.querySelectorAll('a[href*="gog.com"]');
goglinks.forEach(function (el) {
if (!el.href.includes("pp=")) {
el.href = el.href.replace(/\?.*$/, "") + "?pp=" + aid;
}
});
},
{
onlyStream: true
}
);
</script>
Poi aggiungilo alla scheda Intestazione del tuo componente e sei a posto. Ho usato GOG in questo esempio perché era quello che mi hai chiesto, ma questo schema può essere utilizzato per qualsiasi programma di affiliazione, purché tu conosca la struttura dell’URL.
Wow, che tutorial fantastico e educativo!
Il JSFiddle era solo un esempio che ho trovato. Questo nostro nuovo potenziale partner utilizza un prefisso https://, piuttosto che un ID affiliato alla fine. Usano la piattaforma adtraction.com.
Condivido qui la mia versione modificata per gli altri da utilizzare.
<script type="text/discourse-plugin" version="0.8.42">
api.decorateCookedElement(
element => {
const affiliate = 'https://their-ad-network.com/...';
const affiliate_links = element.querySelectorAll('a[href*="potentialparterwebsite.com"]');
affiliate_links.forEach(function(el) {
if (!el.href.startsWith(affiliate)) {
el.href = affiliate + encodeURIComponent(el.href);
}
});
},
{
onlyStream: true
}
);
</script>
Quindi ora il codice aggiunge prima l’URL della rete pubblicitaria, che traccia i clic, e poi lo completa con il link del partner.
Sebbene questo funzioni elegantemente per i collegamenti creati manualmente, collegando una parola a https://website, non sembra catturare i collegamenti generati automaticamente dal parser di Discourse. In altre parole:
Questo funziona: Google
Ma questo no: Google.com
È possibile migliorare lo script per catturare anche i collegamenti generati automaticamente?