Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)
La monetización de un blog no es obligatoria, pero es una fuente de motivación muy importante. Ya se trate de un blog en el que solo escribes tú o de uno en el que colaboráis varios autores, ganar algún dinero extra al mes puede cambiar tu enfoque o el de tus compañeros respecto al mismo.
Dado que Google AdSense es uno de los medios más fáciles y populares para monetizar un blog, vamos a ver cómo usarlo en un blog de WordPress en el que participen muchos autores. (No obstante, este tutorial también sirve para un blog de un único autor). Vamos a hablar sobre cómo configurar campos en el perfil de los autores para sus anuncios AdSense y cómo mostrar esos anuncios a través de una función, con un widget, con un shortcode y automáticamente dentro de los artículos del blog.
Calentando Motores: Configurar Campos de Perfil para los Anuncios de Cada Autor
Google acepta anuncios de múltiples editores o autores en un mismo sitio web siempre y cuando no se muestren anuncios de distintos editores en una misma página. Por tanto, vamos a mostrar los anuncios de nuestros autores en las páginas de sus respectivos artículos y los nuestros en otras.
Podríamos solicitar a cada autor de nuestro blog los fragmentos de código de su cuenta de AdSense e insertarlos manualmente en nuestro código, pero pedirselos e insertarlos dinámicamente es una mejor solución. (Además, no es divertido tener que hacer tareas a mano). El siguiente código te proporciona la funcionalidad necesaria para que nuestros autores actualicen sus perfiles e inserten sus propios anuncios de AdSense:
<?php // show the textarea fields for authors' to enter their AdSense ad codes // source: http://www.stemlegal.com/greenhouse/2012/adding-custom-fields-to-user-profiles-in-wordpress/ function wptuts_profile_adsense_show( $user ) { echo '<h3>Your Google AdSense Ads</h3> <table class="form-table"> <tr> <th><label for="adsense_300x250">AdSense Ad Code (300x250)</label></th> <td><textarea name="adsense_300x250" id="adsense_300x250" rows="5" cols="30">' . get_user_meta( $user->ID, 'adsense_300x250', true) . '</textarea><br> <span class="adsense_300x250">Your Google AdSense JavaScript code for the 300x250 ad space.</span></td> </tr> <tr> <th><label for="adsense_468x60">AdSense Ad Code (468x60)</label></th> <td><textarea name="adsense_468x60" id="adsense_468x60" rows="5" cols="30">' . get_user_meta( $user->ID, 'adsense_468x60', true) . '</textarea><br> <span class="adsense_468x60">Your Google AdSense JavaScript code for the 468x60 ad space.</span></td> </tr> </table>'; } add_action( 'show_user_profile', 'wptuts_profile_adsense_show' ); add_action( 'edit_user_profile', 'wptuts_profile_adsense_show' ); // save the changes above function wptuts_profile_adsense_save( $user_id ) { if ( ! current_user_can( 'edit_user', $user_id ) ) return false; update_user_meta( $user_id, 'adsense_300x250', $_POST['adsense_300x250'] ); update_user_meta( $user_id, 'adsense_468x60', $_POST['adsense_468x60'] ); } add_action( 'personal_options_update', 'wptuts_profile_adsense_save' ); add_action( 'edit_user_profile_update', 'wptuts_profile_adsense_save' ); ?>
Si quieres puedes duplicar las filas de la tabla para añadir más tipos de anuncios. Pero no olvides cambiar los nombres (etiqueta name
) y otros parámetros de los campos de entrada.
Creando Nuestra Función Principal
Ahora llegamos a la parte en la que construimos nuestra función principal, la cual será empleada tanto por sí sola como por otras funciones. Observa el código siguiente:
<?php // our main function to return the ad codes // remember: other functions below use this function, too! function wptuts_return_adsense( $ad_type = '468x60' ) { // the default ad codes - don't forget to change them! $default_ad_codes = array( '300x250' => '<img src="http://dummyimage.com/300x250" />', '468x60' => '<img src="http://dummyimage.com/480x60" />' ); if ( is_single() ) { global $post; $user_id = $post->post_author; $ad_code = get_user_meta( $user_id, 'adsense_' . $ad_type, true ); } else { $ad_code = $default_ad_codes[$ad_type]; } if ( $ad_code != '' ) { // we'll return the ad code within a div which has a class for the ad type, just in case return '<div class="adsense_' . $ad_type . '">' . $ad_code . '</div>'; } else { return false; } } ?>
¿Entiendes lo que hace?
- En primer lugar, definimos algunos "códigos predeterminados de los anuncios" para poder mostrarlos en otros sitios que no sean páginas de entradas o artículos del blog´.
- Después comprobamos si la página es una "página de entrada del blog" (single post page).
- Si es así, extraemos los códigos de los anuncios desde el perfil del autor del artículo o entrada y los definimos en la variable
$ad_code
. Aquí, observa como estamos empleando también el parámetro$ad_type
de la función. - Si no es una página de entrada (single post), hemos definido la variable
$ad_code
con los códigos predeterminados del anuncio. - Y si la variable
$ad_code
no está vacía, devolvemos el código del anuncio envuelto dentro de undiv
. (De no ser así, devolvemosfalse
).
¡Hecho! Puedes usar ahora esta función dentro de tu tema siempre que quieras, tanto dentro como fuera del Loop.
¡Me encanta cuando es todo así de sencillo! :)
Crear el Shortcode
Si quieres ofrecer a tus autores la libertad de añadir sus propios anuncios en cualquier lugar de sus artículos, puedes emplear un shortcode como el siguiente:
<?php // shortcode for the above function // usage: [display_adsense ad_type="468x60"] function display_adsense_sc( $atts ) { extract( shortcode_atts( array( 'ad_type' => '468x60' ), $atts ) ); return wptuts_return_adsense( $ad_type ); } add_shortcode( 'display_adsense', 'display_adsense_sc' ); ?>
Esto es incluso más sencillo que la función principal: solo necesitamos el parámetro ad_type
, pasarlo a través de nuestra función principal y devolver la función.
Si no quieres usar ningún parámetro sino simplemente devolver la función principal, ¡ni siquiera necesitas el código de arriba! Simplemente añade esta línea después de la función principal:
<?php // usage: [display_adsense] add_shortcode( 'display_adsense', 'wptuts_return_adsense' ); ?>
Nuestra función principal solo tiene un único parámetro con un valor predeterminado ('468x60'
, en nuestro ejemplo), así que el shortcode solo mostrará este tipo.
Insertar los Anuncios Automáticamente Tras un Párrafo Determinado
Es posible que no quieras, en ciertos casos, ofrecer a los autores la libertad de mostrar sus anuncios. Si decides insertar sus anuncios automáticamente, por ejemplo tras el segundo párrafo de cada artículo; la función que necesitas es la siguiente:
<?php // the function to insert the ads automatically after the "n"th paragraph in a post // the following code is borrowed from Internoetics, then edited: // http://www.internoetics.com/2010/02/08/adsense-code-within-content/ function wptuts_auto_insert_adsense( $post_content ) { if ( !is_single() ) return $post_content; $afterParagraph = 1; // display after the "n"th paragraph $adsense = wptuts_return_adsense( '468x60' ); preg_match_all( '/<\/p>/', $post_content, $matches, PREG_OFFSET_CAPTURE ); $insert_at = $matches[0][$afterParagraph - 1][1]; return substr( $post_content, 0, $insert_at) . $adsense . substr( $post_content, $insert_at, strlen( $post_content ) ); } add_filter( 'the_content', 'wptuts_auto_insert_adsense' ); ?>
Si vas a descargar el plugin que estamos construyendo ahora mismo (puedes hacerlo con el botón al inicio de este artículo), no olvides que la línea con la función add_filter()
contiene un comentario. Elimina el comentario para habilitar esta funcionalidad.
Crear el Widget para AdSense
Crear Widgets puede resultar confuso, aunque es realmente muy fácil. En nuestro caso, simplemente vamos a volver a usar nuestra función principal y a permitir que los administradores de nuestro blog configuren su parámetro por defecto:
<?php // the widget to display the ads on the sidebar class Wptuts_AdSense_Widget extends WP_Widget { public function __construct() { parent::__construct( 'wptuts_adsense_widget', // base ID of the widget 'Wptuts+ AdSense Widget', // the name of the widget array( 'description' => 'Wptuts+ AdSense Widget Settings' ) // the description for the widget ); } public function form( $instance ) { if ( isset( $instance[ 'ad_type' ] ) ) { $ad_type = $instance[ 'ad_type' ]; } else { $ad_type = '300x250'; } ?> <p> <label for="<?php echo $this->get_field_id( 'ad_type' ); ?>">Ad Type</label> <input class="widefat" id="<?php echo $this->get_field_id( 'ad_type' ); ?>" name="<?php echo $this->get_field_name( 'ad_type' ); ?>" type="text" value="<?php echo esc_attr( $ad_type ); ?>" /> </p> <?php } public function update( $new_instance, $old_instance ) { $instance = array(); $instance[ 'ad_type' ] = strip_tags( $new_instance[ 'ad_type' ] ); return $instance; } public function widget( $args, $instance ) { echo wptuts_return_adsense( $instance[ 'ad_type' ] ); } } function myplugin_register_widgets() { register_widget( 'Wptuts_AdSense_Widget' ); } add_action( 'widgets_init', 'myplugin_register_widgets' ); ?>
El widget también contiene una función muy simple: si estamos en una página de artículo (single post), muestra el anuncio del autor y si no es así, muestra el anuncio predeterminado.
Conclusión
Si tienes un blog con más de un autor y no dispones de capital para pagarles por su trabajo, estos trucos podrían motivarlos a escribir con más frecuencia. Incluso es posible que compartan y promocionen sus propios artículos con mayor entusiasmo, ya que tienen sus propios anuncios en esas páginas. ¡Es algo inteligente y bueno!
¿Se te ocurren algunas otras ideas para monetizar un blog en el que participan varios autores? ¡Compártelas aquí abajo a través de un comentario!
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weekly