¿Dónde colocar el script del anuncio?

Es un poco difícil abordar tus puntos sin contexto. Sería muy útil si pudieras incluir más detalles sobre a qué red publicitaria te refieres y exactamente cómo no funcionó para ti.

Eso no es del todo cierto y realmente depende de la red publicitaria que intentes usar. Si es un requisito estricto que el script de la red publicitaria se coloque junto a la etiqueta </body> (lo cual es poco probable), entonces la culpa es realmente de la red publicitaria por tener un requisito tan estricto e irrazonable.

Los scripts agregados en un tema se integran en un archivo theme.js que luego se inyecta en la etiqueta <head> del documento.

Esto nos da cierto nivel de control y nos permite implementar funciones útiles, como evitar que temas defectuosos derriben todo el sitio, por ejemplo.

Esto también es solo parcialmente cierto. Los temas pueden modificar cualquier cosa en el lado del cliente. Esto significa que todo lo escrito en JavaScript en Discourse es accesible para los temas.

De hecho, todo el plugin oficial de anuncios podría convertirse en un componente de tema y funcionaría. Lo único que faltaría sería la capacidad de agregar un archivo ads.txt, ya que eso requeriría acceso al backend. La razón por la que no lo hemos hecho es porque un plugin es una implementación más limpia para este propósito, principalmente porque incluye más de un proveedor. Así que sí, los temas tienen limitaciones, pero ese no es realmente el punto principal aquí.

Hay una nota muy importante aquí: Discourse es una aplicación de una sola página (SPA). Esto significa que una vez que cargas la aplicación en la visualización inicial de la página, toda la navegación posterior es manejada por Discourse y no por tu navegador.

Es importante tenerlo en cuenta porque una red publicitaria debe proporcionar los ganchos necesarios para que las aplicaciones de una sola página actualicen la información de la página y sirvan nuevos anuncios. No sé mucho sobre Adbutler u Openx, pero no encontré documentación sobre soporte para aplicaciones de una sola página por parte de ninguno de estos proveedores.

Entonces, si la red publicitaria no proporciona los ganchos necesarios, ¿es realmente culpa de Discourse que no sea compatible?

Realmente no estás obligado a usar DFP. Es solo una de las seis opciones disponibles en el plugin oficial de anuncios, y las listaré aquí para referencia:

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

Nuevamente, porque Discourse es una aplicación de una sola página, lo “genérico” simplemente no funcionará.

Por supuesto, puedes cargar cualquier script de anuncios que desees en un tema, pero solo se ejecutarán en la visualización inicial de la página. Cualquier cosa que ocurra después será ignorada por el script de la red publicitaria, a menos que esta proporcione los ganchos necesarios.

Así es como se ve una integración de este tipo en una red publicitaria que soporta aplicaciones de una sola página:

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

En realidad, sí necesitas tener implementaciones de código específicas para cada red publicitaria.

Además, creo que estás mezclando los anuncios internos con los anuncios de redes publicitarias. La razón por la que la caja solo acepta HTML es porque está diseñada para crear tus propios anuncios internos. Es una implementación muy sencilla que ya está configurada en el plugin para que no tengas que preocuparte por los ganchos de aplicaciones de una sola página si solo quieres mostrar tus propios anuncios.

Además, si realmente deseas que otra red publicitaria se incluya en el plugin de anuncios, existe un precedente para agregar nuevas redes basadas en contribuciones de la comunidad.

El ejemplo más reciente es la integración de Carbon Ads:

Sin embargo, la responsabilidad de configurar todo correctamente recae sobre ti.

Si consideras que dicha implementación es demasiado complicada, entonces así es. Soy muy competente cambiando las llantas o el aceite de mi coche, pero si necesito reparar la transmisión, simplemente busco a alguien que sepa más que yo y les pago para que lo hagan por mí.

Lo que quiero decir es que si realmente quieres usar otra red publicitaria y no logras hacerlo por ti mismo, te sugiero crear un tema en Marketplace y estoy seguro de que obtendrás la atención de algún desarrollador si tienes el presupuesto adecuado.