Cómo añadir publicidad de adsense en mitad de la entrada de WordPress
Una forma fácil de monetizar un blog es insertar publicidad como adsense (entre otros) que, aunque poquitos, generan algunos ingresos en función a las visitas y clicks que recibe nuestra página.
Aunque no hay unas reglas claras de cuales son las mejores zonas para insertar un anuncio (ya sabes, dónde recibirá más clicks o dónde tendrá más posibilidades), yo siempre me he decantado por colocar uno al inicio (casi inmediatamente al título de la entrada) y otro a mitad (podríamos colocar otro al final, pero depende del tamaño de tu entrada puede resultar demasiada publicidad.
En mi caso, mis entradas suelen ser de entre 700 y 1500 palabras, dependiendo del tema y lo inspirado que esté en ese momento. Lógicamente, también tengo entradas con poquitas palabras (unas 300).
Creando el hook, ¿Qué es un Hook?
Como sabes, WordPress funciona con un sistema de Hooks (o «ganchos») que nos permiten inyectar, por así decirlo, filtros en las funciones nativas de WordPress.
Para que entiendas mejor el concepto, quiero que te plantees una situación en la que cada vez que se llame a la función the_content() se deba aplicar una tarea; en nuestro caso insertar el anuncio. Si echamos un ojo al loop (búcle) de WordPress vemos lo siguiente:
if (have_posts()) : ?> while (have_posts()) : the_post(); ?> <!-- Aquí hacemos varias cosas, como darle forma a la entrada ... --> <?php //Y llamamos a the_content() the_content(); endwhile; endif; |
No hace falta que entiendas cada elemento de ese código, lo que quiero hacerte ver es que si nos limitamos a añadir el código de adsense aquí, sólo podremos añadirlo al principio o al final de la entrada, nunca en el medio.
Para poder insertarlo en el medio, hemos de crear un hook, para que cada vez que se haga una llamada a la función the_content() aplique un filtro.
La función en sí es esta:
add_filter( 'the_content', 'ad_mid_content' ); function ad_mid_content( $content ) { if( !is_single() ) return $content; $para_count = substr_count($content, ""); $para_After = floor($para_count/2); //$para_After = 2; //Aquí puedes insertar el anuncio directamente en el párrafo 2, o en el que tú le indiques. //Controlamos el número mínimo de palabras que tendrá que cumplir la entrada para aplicar esto $word_count = str_word_count( strip_tags( $content ) ); //Acuérdate de modificar el 500 por otro número si quieres que sea diferente. if($word_count < 500) return $content; $content = explode ( "</p>", $content ); $new_content = ''; for ( $i = 0; $i < count ( $content ); $i ++ ) { if ( $i == $para_After ) { $new_content .= '<div class="anuncio_titulo">'; $new_content .= '<!-- PEGA AQUI EL CODIGO DE ADSENSE, TAL Y COMO TE LO DA GOOGLE -->'; $new_content .= ''; } $new_content .= $content[$i] . ""; } return $new_content; } |
Analizando la función
Como siempre que publico algo, intento explicarte de dónde vienen las cosas. La función que te he dejado arriba funciona perfecta si la agregas a tu functions.php, pero lo bonito de todo esto es, por lo menos, entenderlo, ¿no?
- add_action(): Agrega el hook a la función the_content(); así, cada vez que se ejecute dicha función, añadirá nuestro filtro para agregar el anuncio en la mitad de la entrada.
- Los ifs: con el primero controlamos que sea una entrada, no nos interesa agregar el anuncio en ningún otro lado (modifícalo o coméntalo si no quieres que sea así). El segundo if controla el número de palabras de la entrada; si es menor a 500 no inserta el anuncio.
- $para_count y $para_After: Son dos variables (plas, plas, plas) que controlan el número de párrafos de la entrada y la mitad de la misma, respectivamente.
- $word_count: Esta variable extrae el número de palabras que contiene la entrada, para poder hacer funcionar el segundo if.
- El for: hace tantas iteraciones como sean necesarias para colocarse en el medio de la entrada, haciendo uso de las variables $para_count y $para_After, y así insertar el anuncio justo en el medio.
El resto realmente es innecesario explicarlo. Sí me gustaría que entiendas lo que retorna la función, que es el contenido original con el añadido de nuestro anuncio en el medio. Esto, a través del add_filter, modificará nuestro contenido siempre que cumpla las condiciones explicadas arriba.
Si te es de utilidad, no dudes en compartirlo con tus amigos. Si tienes alguna duda, comenta y trataré de ayudarte.
Excelente tu explicación, aunque mucho no entienda ya que no soy programador y mis conocimientos en WordPress son básicos.
Yo para meter publicidad en mi blog, debo utilizar condicionales ya que divido las ganancias de Adsense con otro autor en mi blog, cada uno obtiene el 100% de las ganancias de su entrada.
Para dividir las ganancias he utilizado un condicional muy precario y con mucho esfuerzo
$author_id=$post->post_author;
if ($author_id == '1')
include 'ad-336-marcelo.html';
else
{
include 'ad-336-damian.html';
}
ese es el código que utilizo en el single.php.
Mi pregunta es:
Debo meter mi codigo en una función y para luego agregarlo a la linea $new_content? O que alternativa me recomiendas.
Saludos y muy bueno el blog!
Hola Marcelo, la idea es exactamente la que comentas. Sustituye la línea
$new_content .= '< ! -- PEGA AQUI EL CODIGO DE ADSENSE, TAL Y COMO TE LO DA GOOGLE -- >';
por tu código y debería funcionar.Saludos y gracias.
El problema mio es que no puedo volcar directamente el código de adsense en esa línea, debo utilizar si o si el condicional para que WordPress muestre la plucidad correspondiente al autor del post. Debo crear una funcion y llamarla en esa línea?
El código no me resulto, probe utilizar tu código solamente y no me aparece nada en la entrada. Debe ser algun problema de mi theme?
El código funciona, lo puedes ver en este propio blog. En teoría basta con sustituir tu función por la línea comentada donde yo sugiero introducir el código que te da adsense.
Hola Darío, gracias por el aporte, es de gran ayuda.
He implementado tu código tal cómo comentas, pero hay un problema, no me muestra el anuncio en medio de la entrada, me lo muestra justo debajo del título…
He puesto el segundo código que pones, el grande, no se lo que puede estar mal o si me puedes hechar una mano para resolverlo.
Gracias de antemano y un saludo!
Hola Diego, el código que debes implementar en tu functions.php es el último, el grande.
Eso inyectará el código en mitad de la entrada.
Problemas que puedes tener: Si tu theme (plantilla) no utiliza la función the_content() para mostrar el contenido (usa una propia), no funcionará.
Revisa que tu plantilla utiliza la función mencionada.
Saludos.
He hecho una búsqueda en Functions.php y me aparece 2 veces The_Content, una en tu códgo y otra en el código del tema, en una función que para redimensionar imágenes.
Sin Embargo, justo debajo del cuadro para escribir código, Donde viene la lista de todas las funciones no aparece the_content().
Cómo ves no estoy muy puesto en esto de los códigos y las funciones, no se si con estos datos podrás comprobar si mi tema incluye esta función o no…
Muy interesante, gracias por tu aporte, una consulta como haría si quiero insertar un anuncio de adsense o cualquier texto encima del último parrafo, espero me puedas ayudar.
Hola Gustavo,
prueba cambiando la línea «if ( $i == $para_After ) {» por «if ( $i == count($content)-1 ) {«
Muchas gracias, me fue de gran ayuda, Saludos
Lo acabo de probar, con unas pequeñas modificaciones mia y funciono de maravilla, Gracias por el aporte.
Llevo dias buscándolo, es genial sobretodo si no te lo has planteado antes y te toca editar todos los posts para insertar la publicidad.
Saludos
Francisco
buena información amigo, tengo una pregunta,como haría si quiero que esa publicidad no aparezca en cierta categoría?
Lo necesitaba para mi blog, muchas gracias!
Buen articulo macho!
el unico defecto que le veo es que no se coloca totalmente en el medio, se coloca digamos en el 1/4, de todas formas es estupendo justo lo que buscaba.
Un saludo!