Onde colocar o script do anúncio?

É um pouco difícil abordar seus pontos sem contexto. Seria muito útil se você pudesse incluir mais detalhes sobre qual rede de anúncios você está se referindo e exatamente como ela não funcionou para você.

Isso não é totalmente verdade e depende realmente da rede de anúncios que você está tentando usar. Se for um requisito estrito que o script da rede de anúncios seja colocado ao lado da tag </body> — o que é improvável —, então a culpa é realmente da rede de anúncios por ter um requisito tão estrito e irrazoável.

Scripts adicionados em um tema são carregados em um arquivo theme.js, que é então injetado na tag <head> do documento.

Isso nos dá algum nível de controle e permite implementar recursos úteis, como impedir que temas quebrados derrubem todo o site, por exemplo.

Isso também é apenas parcialmente verdadeiro. Temas podem modificar qualquer coisa no lado do cliente. Isso significa que tudo o que é escrito em JavaScript no Discourse está acessível pelos temas.

Na verdade, todo o plugin oficial de anúncios pode ser convertido em um componente de tema e funcionaria. A única coisa que faltaria seria a capacidade de adicionar um arquivo ads.txt, pois isso exigiria acesso ao back-end. A razão pela qual não fizemos isso é porque um plugin é uma implementação mais limpa para esse propósito — principalmente porque inclui mais de um provedor. Então, sim, temas têm limitações, mas isso não é realmente o ponto principal aqui.

Há uma observação muito importante aqui: o Discourse é um aplicativo de página única (SPA). Isso significa que, uma vez que você carrega o aplicativo na visualização inicial da página, toda a navegação que ocorre depois disso é gerenciada pelo Discourse e não pelo seu navegador.

Isso é importante porque uma rede de anúncios precisa fornecer os ganchos necessários para que aplicativos de página única atualizem as informações da página e veiculem novos anúncios. Não sei muito sobre Adbutler ou Openx, mas não consegui encontrar nenhuma documentação sobre suporte a aplicativos de página única de nenhum desses provedores.

Então, se a rede de anúncios não fornecer os ganchos necessários, é realmente culpa do Discourse que ela não seja suportada?

Você não está realmente obrigado a usar o DFP. Ele é apenas uma das seis opções disponíveis no plugin oficial de anúncios, e vou listá-las aqui para referência:

  1. DFP
  2. AdSense
  3. Google Ads
  4. Amazon Advertising
  5. Codefund
  6. Carbon Ads

Novamente, porque o Discourse é um aplicativo de página única, “genérico” simplesmente não funcionará.

Claro, você pode carregar qualquer script de anúncio que quiser em um tema, mas eles só serão acionados na visualização inicial da página. Qualquer coisa que venha depois disso será ignorada pelo script da rede de anúncios — a menos que a rede forneça os ganchos necessários.

Veja como uma integração assim se parece em uma rede de anúncios que suporta aplicativos de página única.

https://github.com/discourse/discourse-adplugin/blob/master/assets/javascripts/discourse/components/google-dfp-ad.js.es6#L191-L230

Na verdade, você precisa ter implementações de código específicas para cada rede de anúncios.

Além disso, acho que você está confundindo anúncios internos com anúncios de redes de anúncios. A razão pela qual a caixa aceita apenas HTML é porque ela deve ser usada para criar seus próprios anúncios internos. É uma implementação muito direta que já foi configurada no plugin, para que você não precise se preocupar com ganchos de página única se quiser veicular apenas seus próprios anúncios.

Além disso, se você realmente quiser que outra rede de anúncios seja incluída no plugin de anúncios, há precedentes de adicionarmos novas redes com base em contribuições da comunidade.

O exemplo mais recente disso é a integração com o Carbon Ads:

No entanto, a responsabilidade de configurar tudo corretamente recai sobre você.

Se você achar essa implementação muito complicada, então é isso. Sou muito competente em trocar os pneus ou o óleo do meu carro, mas se preciso fazer a manutenção da transmissão, simplesmente procuro alguém que saiba mais do que eu e pago para que faça isso por mim.

O que quero dizer é que, se você realmente quiser usar outra rede de anúncios e não conseguir fazer isso sozinho, sugiro criar um tópico em Marketplace e tenho certeza de que você chamará a atenção de algum desenvolvedor se tiver o orçamento adequado.