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?
Je sais que cela date de 2016, mais je ne trouve pas de réponse à cette question et je cherche quelque chose de similaire. Existe-t-il un plugin permettant une réécriture « générique » d’une URL soumise par des membres de la communauté, par exemple pour ajouter un tag d’affiliation ou remplacer un lien soumis par un utilisateur par un lien d’affiliation ?
Pas que je sache, mais je suis intéressé d’entendre s’il y a eu des développements à cet égard ![]()
Cela devrait être possible dans un composant de thème de nos jours, selon l’apparence souhaitée pour les liens.
Pouvez-vous publier un exemple du lien de base et un exemple de son apparence en tant que lien d’affiliation ?
Cette discussion s’est terminée prématurément. Je devrai peut-être repenser la monétisation de notre communauté.
Dans mon cas, j’aurais besoin d’ajouter un préfixe à une URL.
http://merchantxyz.com/....
et de le convertir en…
https://tracker.adagency123.com/t/t?a=12345678&as=87654321&t=2&tk=1&url=https://merchantxyz.com/...
Plusieurs sujets abordent ce problème, mais existe-t-il une solution prête pour la production ?
Malheureusement, je ne pense pas. Cela serait probablement un excellent candidat pour un emploi Marketplace.
Serait-il possible de l’implémenter via la personnalisation du thème ? Je souhaite modifier ce JSFiddle, mais quelle serait la bonne méthode pour l’intégrer à une instance Discourse — si cela est possible ?
// Remplacez « my-affiliate-id » ci-dessous par votre véritable identifiant d’affilié
const aid = 'my-affiliate-id';
// Ajoutez une barre oblique suivie de l’identifiant d’affilié uniquement si celui-ci n’est pas déjà présent dans le lien
const goglinks = document.querySelectorAll('a[href*="gog.com"]');
goglinks.forEach(function(el) {
if(!el.href.includes('pp=')) {
el.href = el.href.replace(/\?.*$/, '') + '?pp=' + aid
}
})
Oui, c’est possible. Commençons par quelque chose de simple. Tout d’abord, ajoutez ceci dans l’onglet En-tête d’un nouveau composant de thème.
<script type="text/discourse-plugin" version="0.8.42">
</script>
À quoi cela sert-il ? Il s’agit d’un type spécial de balises script gérées par Discourse. Quel est l’avantage ? Cela vous permet d’accéder aux méthodes de l’API des plugins.
Vous souhaitez ajouter un code d’affiliation à certains liens. Cela signifie que vous voulez modifier le contenu des messages. Si vous consultez l’API des plugins, vous verrez qu’il existe bien une méthode pour cela.
Vous l’utilisez de la manière suivante.
api.decorateCookedElement(
element => {
// effectuez vos opérations ici.
// l'élément passé ici est le nœud HTML du message rendu
},
{
// les options vont ici
}
);
C’est l’enveloppe dans laquelle vous devez placer votre code pour qu’il s’exécute lorsqu’un message est rendu. Essayons donc cela.
Nous prenons votre code et l’ajoutons tel quel.
api.decorateCookedElement(
element => {
++ // Remplacez "my-affiliate-id" ci-dessous par votre véritable identifiant d'affiliation
++ const aid = "my-affiliate-id";
++
++ // Ajoutez le slash avec l'identifiant d'affiliation, uniquement si un identifiant d'affiliation n'est pas déjà présent dans le lien
++ const goglinks = document.querySelectorAll('a[href*="gog.com"]');
++ goglinks.forEach(function (el) {
++ if (!el.href.includes("pp=")) {
++ el.href = el.href.replace(/\?.*$/, "") + "?pp=" + aid;
++ }
++ });
},
{
// les options vont ici
}
);
Cela fonctionne-t-il ? Oui, mais cela effectue également des tâches redondantes puisque nous interrogeons le document pour les liens au lieu de l’élément du message. Alors, comment corriger cela ?
Rappelez-vous l’argument element que nous avons passé dans la méthode ? Eh bien, c’est là qu’il devient utile.
Au lieu d’interroger le document, nous interrogeons l’élément que nous souhaitons cibler. Nous modifions donc ceci :
const goglinks = document.querySelectorAll('a[href*="gog.com"]');
en ceci :
const goglinks = element.querySelectorAll('a[href*="gog.com"]');
et voici ce que nous obtenons finalement :
api.decorateCookedElement(
element => {
// Remplacez "my-affiliate-id" ci-dessous par votre véritable identifiant d'affiliation
const aid = "my-affiliate-id";
// Ajoutez le slash avec l'identifiant d'affiliation, uniquement si un identifiant d'affiliation n'est pas déjà présent dans le lien
-- 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;
}
});
},
{
// les options vont ici
}
);
Cela fonctionne très bien maintenant, mais nous pouvons encore l’améliorer un peu. Puisque vous ajoutez uniquement un identifiant d’affiliation aux liens, vous n’avez pas besoin que cela s’exécute lorsque vous êtes dans l’éditeur de message. C’est là que les options de la méthode deviennent utiles.
L’une des options que vous pouvez passer à la méthode est onlyStream.
À quoi cela sert-il ? Cela indique à la méthode que vous ne souhaitez que ce code s’exécute lorsque le message est rendu à l’intérieur d’un sujet. Ajoutons cette option.
api.decorateCookedElement(
element => {
// Remplacez "my-affiliate-id" ci-dessous par votre véritable identifiant d'affiliation
const aid = "my-affiliate-id";
// Ajoutez le slash avec l'identifiant d'affiliation, uniquement si un identifiant d'affiliation n'est pas déjà présent dans le lien
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
}
);
Donc, maintenant, la seule chose qui reste à faire est de placer ce code dans la balise script spéciale dont nous avons parlé plus tôt.
<script type="text/discourse-plugin" version="0.8.42">
api.decorateCookedElement(
element => {
// Remplacez "my-affiliate-id" ci-dessous par votre véritable identifiant d'affiliation
const aid = "my-affiliate-id";
// Ajoutez le slash avec l'identifiant d'affiliation, uniquement si un identifiant d'affiliation n'est pas déjà présent dans le lien
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>
Ensuite, ajoutez-le dans l’onglet En-tête de votre composant, et vous êtes prêt. J’ai utilisé GOG dans cet exemple car c’est ce dont vous m’avez parlé, mais ce modèle peut être utilisé pour n’importe quel programme d’affiliation tant que vous connaissez la structure de l’URL.
Ouah, quel tutoriel fantastique et éducatif !
Le JSFiddle n’était qu’un exemple que j’ai trouvé. Ce nouveau partenaire potentiel utilise un préfixe https://, plutôt qu’un ID d’affiliation à la fin. Ils utilisent la plateforme adtraction.com.
Je publie ici ma version modifiée pour que d’autres puissent l’exploiter.
<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>
Ainsi, le code ajoute d’abord l’URL du réseau publicitaire, qui suit les clics, puis y ajoute le lien du partenaire.
Bien que cela fonctionne élégamment pour les liens créés manuellement en reliant un mot à https://website, il ne semble pas détecter les liens générés automatiquement par l’analyseur de Discourse. Autrement dit :
Cela fonctionne : Google
Mais cela ne fonctionne pas : Google.com
Le script peut-il être amélioré pour détecter également les liens générés automatiquement ?