Cómo insertar código (o publicidad) en los post de nuestro WordPress

incluir publicidad en articulos

Sigo tocando el código con eso de ir probando diferentes formas amigables de meter publicidad en una web.

Hace casi un mes explicaba todo el proceso que había seguido para mostrar publicidad únicamente a aquellos usuarios que venían de referrals específicos (en este caso, de búsquedas en internet y redes sociales no cualificadas). De esta forma, y al menos en teoría (habrá que esperar unos cuantos meses hasta que las pujas por CPM y CPC se vayan ajustando) optimizaba los beneficios sin llegar a molestar a los usuarios habituales, aquellos que ya han demostrado interés por la página y que normalmente acceden a la información mediante otros canales (la newsletter, listas de difusión en Twitter, RSS, enlace directo,…). Y además, que la publicidad no se mostrase en páginas, habida cuenta de que ya sería el colmo que en mis páginas de consultoría y analítica (por poner un par de ejemplos), presumiblemente visitadas por potenciales clientes, se le mostrase publicidad de otros consultores…

En aquel momento expliqué con pelos y señales la dificultad con la que me había encontrado a la hora de materializar esto sin recurrir a cookies ni almacenes de sesión. Dos herramientas muy potentes en cuanto a funcionalidad, pero que me obligarían a monitorizar las peticiones de cada usuario. Algo totalmente normal en la industria, pero con lo que un servidor está en contra.

Una vez montado todo el sistema, y segmentado de forma amigable la publicidad de AdSense, la he ido colocando en los lugares que se suelen recomendar. A saber:

  • Justo debajo del menú principal.
  • En la barra lateral (tanto la del index/categorías como la de cada artículo en la versión de escritorio).
  • En el footer.
  • Justo encima de la sección de comentarios.
  • Justo debajo del menú principal en la versión AMP de cada artículo.
  • En el footer de la versión AMP de cada artículo.

También le he metido uno de los formatos exclusivos para dispositivos móviles de AdSense (ancla), que está justo al límite de lo que creo que es aceptable. No todos operan juntos, así que al final de media hablamos de unos 3-5 anuncios por página, según la ocasión.

Como decía, voy a darle de margen unos meses para ver cómo van funcionando, y a partir de entonces empezaré a hacer test, quitar y poner anuncios (una cosa es lo que se recomienda de forma genérica, y otra es lo que funciona en cada negocio). La idea no es tanto vivir de esto (sería un iluso si lo pensase), sino utilizar este espacio para probar locuras que luego pueda implementar con conocimiento de causa (datos en mano) en mis clientes.

Pero me faltaba una última pieza: encontrar la manera de incluir código de forma automática (sin cambiar a mano la BBDD) dentro de los propios artículos, y que además, cumpliera todo lo anterior (solo mostrarse para X usuarios, no invasiva y que no apareciese en páginas).

Mostrar publicidad dentro de un artículo del blog

Realmente hay varias formas de hacerlo, pero para mi caso particular:

  • No quería depender de otro plugin más: Ya sabemos que mientras más plugins tengamos, generalmente más lenta carga la página. Ya bastante aumenta la carga el meter publicidad como para encima necesitar otro plugin como Quick Adsense (EN) y compañía.
  • Quería que se adaptase al contenido: Por la forma en la que en su día modifiqué la plantilla de esta página, algunas maneras que existen de formatear texto no se ajustan a mis necesidades. El criterio de dónde mostrar el contenido debía por tanto ser ajeno al propio contenido, cosa que explicaré a continuación.

Así, después de darme una vuelta por la Red, acabé encontrando un código en AyudaWP (ES) que me sirvió de base para lo que quería hacer.

Para ello, cree en mi archivo AdSense.js (si no sabe de lo que hablo échele un ojo a este otro artículo) dos nuevas instancias del tipo:

 //Banner de dentro del artículo Z
    function adsenseArticleZ() {
      if (sevisitor) {
         varlarge = '<?php if (is_page()) { \n\
         sevisitor = false; \n\
      } ?> \n\
      <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> \n\
      <ins class="adsbygoogle" \n\
      style="display:block" \n\
      data-ad-client="XXXXXXXXXXXXX" \n\
      data-ad-slot="YYYYYYYYYY" \n\
      data-ad-format="auto"></ins> \n\
      <script> \n\
      (adsbygoogle = window.adsbygoogle || []).push({}); \n\
      </script> \n\
      ';
      document.write(large);
   }
 }

Sobra decir que cada una es semejante a la otra, solo que llamándose distinto (adsenseArticle1 y adsenseArticle2) y cambiando XXXXXXXX y YYYYYYYYY por los valores que correspondan.

Ahora solo faltaba hacer que se mostrase cada una de ellas donde correspondiese mediante el código:

<script type="text/javascript">adsenseArticleZ();</script>

Para ello he utilizado este otro, que hay que colocar en el archivo functions.php de nuestra plantilla:

 //Publicidad tras X párrafos
 add_filter( 'the_content', 'publicidad_tras_parrafo' );
 function publicidad_tras_parrafo( $content ) {
    if( !is_single() )
       return $content;
    $paragraphAfter1 = 5; //numeros de párrafos antes del primer anuncio
    $paragraphAfter2 = 18; //número de párrafos antes del segundo anuncio
    $content = explode ( "</p>", $content );
    $new_content = '';
    for ( $i = 0; $i < count ( $content ); $i ++ ) {
       if ( $i == $paragraphAfter1 ) {
          $new_content.='<script type="text/javascript">adsenseArticle1();</script>';
       }
       if ( $i == $paragraphAfter2 ) {
          $new_content.='<script type="text/javascript">adsenseArticle2();</script>';
       }
       $new_content.=$content[$i] ."</p>";
   }
   return $new_content;
 }

Como verá, lo que estoy definiendo aquí es que antes de mostrarle al usuario el contenido del artículo, cuente el número de párrafos que contiene, y después de 5 y de 18 párrafos agregue la función que llama a cada uno de los banners de AdSense anteriormente creados.

Hay que considerar que esa validación inicial (!is_single()), que se asegura de solo mostrar el contenido en páginas de artículo, para mi caso ya no era necesario (hago una comprobación un tanto más compleja al principio de la página), pero la he dejado ya que así el sistema no tiene que cargar la función entera cuando no es necesario.

Elegí que el primer código se muestre a los 5 párrafos y el segundo a los 18 más o menos a ojo. La idea era que el primero apareciese poco después de la imagen principal, y el segundo, si tiene que aparecer, apareciese cerca del final de artículos un poco más largos. Como la mayoría de mis artículos, a día de hoy, tienen más de 1100 palabras, lo más habitual es que este segundo acabe por mostrarse cerca del final, donde llego a las conclusiones del mismo.

En el caso de que el artículo sea más corto (como muchos del principio) este segundo anuncio no se mostrará, así que no hay problema.

Tampoco me tenía que preocupar por si esto hacía que se mostrase en búsquedas internas (todas mis piezas se muestran acotadas al primer o segundo párrafo), pero en todo caso esta pieza de código evita que esto pase para todos aquellos que muestran el contenido íntegro fuera de la página del artículo.

También decir que en este caso quería mostrar dos piezas de código en distintos lugares. Si solo necesitamos meter una, o queremos meter varias más, lo único que hay que hacer es variar el número de elementos $paragraphAfterX que tenemos, poniéndoles el número de párrafos que queremos que esperen antes de mostrar el siguiente, e incluir el número de condicionales dentro del FOR que sean necesarios (para uno, solo uno; para dos, dos; para tres…).

En fin, que por aquí queda la propuesta.

¿Dudas, súplicas, críticas, recomendaciones?

Seguiré informando :).

 

P.D.: Sobra decir que si queremos que se muestre el código justo antes de empezar el artículo podríamos poner $paragraphAfter a 0, o incluir el propio código en la zona correspondiente del archivo single.php de nuestra plantilla. Para hacer lo propio pero mostrando el código al final del artículo, yo recurriría a esta segunda vía.

 

________

Si el contenido que realizo le sirve en su día a día, piense si merece la pena invitarme a lo que vale un café, aunque sea digitalmente.

hazme patrono pabloyglesias