Índice de contenidos
Insertar publicidad propia o de afiliados dentro del contenido de un post
En este nuevo post aprenderás a insertar publicidad dentro del contenido de las entradas y páginas de WordPress. Te explicaré dos maneras diferentes para lograr colocar, imágenes, banners de afiliados… dentro de tu contenido. Obviamente estamos hablando de insertar contenido dinámico de manera automática en todas las páginas, entradas…
Seguramente te has fijado en más de una página web que tiene anuncios dentro del contenido de sus entradas y/o páginas. Probablemente si estás leyendo esta entrada es porque te preguntas cómo puedes insertar publicidad dentro del contenido de tus artículos:
- ¿Tienes que ir entrada por entrada editando el contenido? La respuesta es un NO rotundo, sería ineficiente lo mires como lo mires.
- ¿Tienes que recurrir a plataformas de terceros? Si tu objetivo es insertar unos pocos anuncios de afiliados o similares, publicidad de unas pocas empresas, productos recomendados… este post es para ti. En caso contrario, si lo que quieres es rentabilizar tu blog con publicidad de múltiples empresas y productos, te conviene recurrir a los servicios de algunas redes publicitarias o agencias publicitarias online. Si este es tu objetivo te recomiendo el siguiente artículo de www.dineropornavegar.es, donde analizan 20 empresas de publicidad online.
Insertar publicidad dentro del contenido de tus post insertando código en functions.php
Para insertar anuncios dentro del contenido, vamos a crear un código que copiaremos dentro de nuestro archivo functions.php del tema. En este ejemplo insertaremos publicidad dentro del contenido de las entradas de nuestro blog. A lo largo de este tutorial encontrarás modificaciones del código que te ayudarán a insertar banners de publicidad dentro del contenido de páginas, post, post según categoría, entradas personalizadas…
Abre tu archivo functions.php. La ruta del archivo es la siguiente: wp-content/themes/tutema/functions.php
Recuerda que si no quieres perder los cambios realizados en tu página después de una instalación es recomendable crear tu propio plugin o trabajar con un tema hijo.
Copia y pega el siguiente código:
//insertar anuncios dentro del contenido add_filter( 'the_content', 'insertar_anuncios_contenido_post' ); function insertar_anuncios_contenido_post( $content ) { $contenido_ad = '<div>El contenido del anuncio</div>'; if ( is_single() && ! is_admin() ) { return insertar_despues_del_parrafo( $contenido_ad, 2, $content ); } return $content; } //buscando el lugar dentro del contenido function insertar_despues_del_parrafo( $insertion, $paragraph_id, $content ) { $closing_p = '</p>'; $paragraphs = explode( $closing_p, $content ); foreach ($paragraphs as $index => $paragraph) { if ( trim( $paragraph ) ) { $paragraphs[$index] .= $closing_p; } if ( $paragraph_id == $index + 1 ) { $paragraphs[$index] .= $insertion; } } return implode( '', $paragraphs ); }
Para tener tu código funcionando, debes sustituir: ‘<div>El contenido del anuncio</div>’ por el contenido de tu anuncio, por ejemplo:
<a href="//es.123rf.com/#nereal"> <img src="//es.123rf.com/submit/staticbanners/250X250_photo.jpg" alt="Stock Photos from 123RF" border="0" width="250" valign="top" height="250"> </a>
*el ejemplo anterior muestra como insertar un banner de afiliado con enlace e imagen. El código original mostrado en este apartado es de la web WpBeginner.
Explicando el código que inserta anuncios dentro del contenido
Vamos a explicar el código completo para que tengas control total sobre las funciones. Si entiendes bien estas funciones, serás capaz de realizar cambios y adaptar el código a tus necesidades.
1.- Filtro
add_filter( 'the_content', 'insertar_anuncios_contenido_post' );
Cómo nuestro objetivo es modificar el contenido de nuestros post o páginas, lo primero que hacemos es utilizar el filtro: «the_content». Este filtro actúa después de extraer el contenido de la base de datos y antes de imprimirlo en pantalla. El funcionamiento es el siguiente:
- Consulta a la base de datos y trae el contenido.
- Si hay un filtro que afecte al contenido, ejecutar el filtro => en nuestro caso, ejecutar la función: insertar_anuncios_contenido_post
- Mostrar el resultado por pantalla
2.- Función crear anuncio
function insertar_anuncios_contenido_post( $content ) {
Declaramos la función principal que devuelve el contenido del post modificado. Si observas verás que a la función le pasamos un parámetro «$content». Realmente es el filtro anterior quién se encarga al llamar a la función de enviar el contenido del post.
$contenido_ad = '<div>El contenido del anuncio</div>';
Creamos una variable: «$contenido_ad». Su función es almacenar el contenido de nuestro anuncio; textos, enlaces, imágenes… Debes modificar este contenido para que se adapte a tus anuncios.
if ( is_single() && ! is_admin() ) {
Fíjate bien en esta línea del código, es la que permite que las entradas únicamente se muestren en las páginas individuales de nuestro blog. Para conseguir esto utilizamos la función is_single(), que comprueba si un post individual se está mostrando. is_single() es booleana, es decir devuelve true o false. También utilizamos la función is_admin() que controla si estamos viendo la entrada dentro del administrador de WP. Esta función devuelve true o false, por ejemplo, devolverá true si la URL actual es una página dentro del administrador.
El significado de esta línea de código es el siguiente: si el contenido pertenece a un post individual y la URL del post no es un post que estoy editando en el administrador WP, entonces entra. En caso contrario salta la condición y devuelve el contenido sin modificar.
return insertar_despues_del_parrafo( $contenido_ad, 2, $content );
Si se da la condición anterior, llamo a la función que se encarga de buscar el párrafo concreto, insertar el contenido y devolver el contenido modificado. La llamada a la función la realizo enviando las tres variables necesarias para ejecutarse:
- El contenido del anuncio que quiero insertar ($contenido_ad)
- La cantidad de párrafos que quiero que se impriman antes que la publicidad (2). Si quieres que tus anuncios se inserten después de otro párrafo cambia el número 2 por el párrafo donde quieres que se inserte la publicidad.
- El contenido entero del post que ha facilitado el filtro the_content ($content)
En la misma llamada indicamos que nos devuelva el resultado de la función insertar_despues_del_parrafo. Para que lo entiendas sin problemas, es equivalente al siguiente código:
$parrafo_con_publicidad= insertar_despues_del_parrafo( $contenido_ad, 2, $content ); return $parrafo_con_publicidad;
3.- Función buscar párrafo he insertar
function insertar_despues_del_parrafo( $insertion, $paragraph_id, $content ) {
Es la función que se encargará de dividir el contenido en párrafos y insertar el anuncio en el lugar adecuado.
$closing_p = '</p>'; $paragraphs = explode( $closing_p, $content );
Para dividir el contenido en párrafos usamos la función PHP «explode». Esta función se encarga de dividir un string, en nuestro ejemplo $content en varios string. Para dividir el string en otros le tenemos que indicar por donde dividir. Como queremos que divida párrafos, le decimos que cada vez que encuentre una etiqueta de cierre de párrafo </p>, corte el string por ahí.
Un ejemplo:
$closing_p=»</p>»;
$content=<p>Peras</p><p>Manzanas</p><p>Limones</p><p>Naranjas</p><p>Melón</p>;
$paragraphs = explode( $closing_p, $content );
$paragraphs[0]=<p>Peras;$paragraphs[1]=<p>Manzanas;$paragraphs[2]=<p>Limones;
El problema es que explode se ha cargado todas las etiquetas de párrafo… lo solucionaremos después.
foreach ($paragraphs as $index => $paragraph) {
Después de dividir el string en párrafos y guardarlos en el array $paragraphs, debemos recorrer todo el array. Vamos a recorrer el array con foreach, puedes trabajar con for o while si te resulta más cómodo. La función de esta línea de código es: recorre el array, por cada iteración guarda el resultado en la variable $paragraph y guarda la posición en $index.
if ( trim( $paragraph ) ) { $paragraphs[$index] .= $closing_p; }
Ya he comentado antes que la función de PHP explode borra el delimitador. Es decir nuestros párrafos individuales han perdido la etiqueta de cierre de párrafo. Vamos a añadir de nuevo esa etiqueta para conservar el HTML correcto. Empleamos la función de PHP trim sobre cada párrafo individual extraído del foreach. Trim devuelve el string sin espacios al inicio y al final del párrafo. Volvemos a guardar el string en el array de todo el contenido, en la misma posición pero añadiendo al final </p>.
$paragraphs[$index] .= $closing_p;
Si esto te resulta confuso o te has perdido, escribe un comentario y trataré de explicarlo de forma que te resulte claro.
if ( $paragraph_id == $index + 1 ) { $paragraphs[$index] .= $insertion; }
Ahora comprobamos si el ID del párrafo, en nuestro caso «2», es igual al índice del array +1. Recuerda que los índices comienzan en «0», es decir el párrafo dos estará guardado en la posición del array «1». En caso de que estemos en el segundo párrafo añadimos $insertion, que es la variable que le hemos pasado $contenido_ad, nuestro anuncio.
return implode( '', $paragraphs );
por último devolvemos todo el contenido del array y separamos cada elemento con un espacio. La función implode se encarga de asignar algo, en nuestro caso un espacio (‘ ‘) entre los elementos de un array.
¿Ha sido duro?
La explicación anterior te ayuda a modificar el código y adaptarlo a tus necesidades. Vamos a ver unos cuantos ejemplos de código modificados que insertan varios anuncios dentro del contenido, insertan anuncios en páginas, insertan publicidad solo en post de una determinada categoría…
Modificaciones del código insertar anuncios
Insertar la publicidad dos veces en el contenido
function insertar_anuncios_contenido_post( $content ) { $contenido_ad1 = '<div>El contenido del anuncio</div>'; $contenido_ad2=$contenido_ad1; if ( is_single() && ! is_admin() ) { $content= insertar_despues_del_parrafo( $contenido_ad1, 2, $content ); $content= insertar_despues_del_parrafo( $contenido_ad2, 8, $content ); return $content; } return $content; }
El código anterior inserta el mismo anuncio dentro del contenido de los post después del párrafo 2 y después del párrafo 8.
Varios anuncios en el mismo post
function insertar_anuncios_contenido_post( $content ) { $contenido_ad1 = '<div>El contenido del 1 anuncio</div>'; $contenido_ad2= '<div>El contenido del 2 anuncio</div>'; if ( is_single() && ! is_admin() ) { $content= insertar_despues_del_parrafo( $contenido_ad1, 2, $content ); $content= insertar_despues_del_parrafo( $contenido_ad2, 8, $content ); return $content; } return $content; }
Mostrar anuncios en determinados post
Si quieres que tus anuncios se muestren solamente en algunos post, puedes utilizar is_single() con diferentes parámetros.
Por ejemplo, insertar publicidad dentro del contenido del post con ID 17:
is_single('17');
o en post que cumplan:
is_single(array(17,'beef-stew','Irish Stew'));
que tienen asignado el ID 17, que su slug es «beef-stew» o su título «Irish Stew».
También puedes crear diferentes anuncios para cada categoría de tus entradas. Si en tu blog hablas de diseño, puedes crear varias funciones: una para iluminación, otra para muebles…
Si quieres insertar publicidad de muebles únicamente en los post con categoría «muebles»:
if ( is_single() && && is_category( 'muebles' ) ! is_admin() ) {
Como ves podemos crear infinitas variantes del código. Si necesitas ayuda para adaptar el código puedes escribir un comentario.
Insertar anuncios en páginas
Si quieres insertar publicidad dentro del contenido de tus páginas, lo único que debes cambiar en el código es:
if ( is_single() && ! is_admin() ) {
por lo siguiente:
// When any single Page is being displayed. if ( is_page() && ! is_admin() ) {
Si quieres insertar publicidad dentro del contenido de páginas concretas, entonces:
is_page( 'contacto' );
esto inserta en anuncio dentro de la página contacto. También puedes pasar el ID de página, ejemplo:
is_page('23');
se mostrará la publicidad en la página cuyo ID es 23.
o en múltiples páginas:
is_page( array( 42, 'about-me', 'Contact' ) );
imprimir el anuncio dentro del contenido de las páginas con ID 42, slug o final de URL «about-me» y con título de página «Contact».
Si tienes creadas entradas personalizadas en tu WP puedes utilizar el siguiente código para añadir banners de publicidad a las entradas personalizadas. Tienes que sustituir is_single() por:
is_singular( 'libro' );
Si además de a las entradas tipo libro quieres añadir a otras entradas personalizadas código de anuncios:
is_singular( array( 'pelicula', 'libro' ) );
Insertar publicidad dentro del contenido de tus post utilizando un plugin WordPress
Hay varios plugins que te facilitan la inserción de banners de publicidad dentro del contenido en Wp. Voy a nombrar dos en concreto, ya que son los únicos con los que he trabajado en algunos proyectos.
El primero Post Adverts es un plugin sencillo de configurar. Después de la instalación, verás un nuevo menú en el administrador de WP: Post Adverts > Settings, desde el menú puedes indicar la configuración que deseas:
- insertar anuncios dentro del contenido de post, páginas o entradas personalizadas.
- Mostrar la publicidad antes del contenido, después del contenido o en un determinado párrafo.
- Compatible con código de terceros como Google Adsense.
Otro plugin similar es Quick Adsense, tiene una interfaz muy sencilla con múltiples opciones de configuración.
Y esto es todo por hoy, después de este intenso post estoy segura de que estarás capacitado para insertar banners dentro del contenido de tus páginas, post o entradas personalizadas. Si alguna parte del tutorial se te resiste puedes enviar un comentario y te echo una mano.
Hola tengo 2 dudas:
Una que no puedo lograr mostrar los anuncios en una sola categoría determinada, me sale en todas, Puedes pasarme bien el codigo para eso?
La otra es si es posible determinar que uno de los anuncio vaya al final del post sin importar la cantidad de párrafos.
Hola:
Si se quiere insertar, por ejemplo, en párrafo 2 y 8, y también al final de la entrada ¿Cómo sería?
Saludos
Genial, muy bien explicado. Creo que sería ya perfecto si el contenido a insertar no se hace ya en el código sino que se genera un contenedor de Widgets, así desde la administración de WordPress ya puedes meter lo que quieras en Widgets. ¿Cómo tendría que ser el código en ese caso? Mil gracias!
Hola Jose, una solución es que transformes la función en un shortcode, aquí te dejo una entrada donde lo explica:
https://laprogramaciondehoy.com/crear-shortcodes-en-wordpress/
también puedes habilitar el uso de PHP dentro de los widget:
https://laprogramaciondehoy.com/ejecutar-codigo-php-en-widgets-de-texto/
y por último crear un plugin:
https://laprogramaciondehoy.com/crear-plugin-en-wordpress/
La propuesta dos (ejecución de PHP dentro de widget) es la más sencilla.
Si necesitas más ayuda me avisas.
Feliz día
Hola Nerea. Estaba buscando algo parecido a esto, y dí con tu post! mis felicitaciones! pero tengo una duda, estoy intentando poner el/los anuncios despues del primer en mi pagina tengo iframe en el principio del los post, y quiero poner dicho anuncio despues de los video.
había modificado el $closing_p = »; por $closing_p = »; pero como dices que tambien elimina el iframe no me acaba de funcionar. este iframe lo tengo dentro de un pero si en lugar de /p pongo el se desmonta todo el site.
Nose si me he explicado bién. espero que si. jeje
Alguna sugerencia de como podría hacerlo?
Hola, no sé si he entendido bien. Tienes un iframe al principio de la página y quieres situar luego el banner. Si es así, closing_p = ‘‘, y return insertar_despues_del_parrafo( $contenido_ad, 1, $content ); debería funcionar si el código iframe lleva etiqueta de cierre.
Ya me dices
lo implemente y salio perfecto pero el detalle esta que no quiero que se muestre en las paginas de contacto ni politicas de cookies como hago?
Hola, puedes filtrar en que páginas se muestra el anuncio, mira el post donde te explica:
if ( is_single() && ! is_admin() ) {
con esto sólo se muestran en las páginas individuales del post, si quieres que se muestre en todas las páginas menos contacto y cookies:
if ( !is_page( ‘contacto’ ) && !is_page( ‘cookies’ ) && ! is_admin() ) {
cambia la palabra «contacto» por el slug de la página contacto.
Ya me cuentas
Hola Nerea, de verdad, muchas gracias por dejar este aporte!!.
Llevo un buen rato buscando como hacer esto, por si fuera poco, tambien comentas como poner más de uno, que es lo que buscaba especialmente.
Un saludo y gracias.
Gracias a ti Daniel, el trabajo dedicado a un artículo compensa con creces si le es útil a un compañero.
Que tengas un feliz viernes.