Comenté ayer cuando pedía ideas para plugins de WordPress que tenía un par en mente.

Una de ellas, era la posibilidad de mostrar anuncios (o cualquier cosa, pero generalmente el uso sería para publicidades) solamente en los posts que no estén en portada, o que no sean los primeros «x» posts, o que deban tener «x» días de publicados. De esta manera, se premiaría a los usuarios que nos visitan diariamente, ya que no verían casi publicidades. La realidad es que el archivo es en general lo que da dinero, así que no veríamos bajas significantes de ingresos y mejoraríamos un poco el aspecto de nuestros blogs.

Muy entusiasmado estaba y ya tenía pensado varias opciones para darle, cuando buscando me encontré con que ya estaba hecho. Me costó encontrarlo ya que no está en el directorio de plugins oficial de WordPress, sino que figuraba en una recopilación de plugins recomendados. Así que, aunque me alegro de que todos los bloggers pueden disfrutar de ese plugin, me frustré bastante ya que era la idea más sólida que tenía. El plugin se llama Shylock AdSense y está muy bueno realmente, ofrece muchísimas opciones.

Sin embargo, el plugin lo hice de todas maneras 😀 Lo hice muy sencillo, sin opciones ni nada, para satisfacer solamente mis necesidades. Así surge este post, donde voy a mostrar más o menos cómo lo hice, para que se den una idea de cómo se hace un plugin para WP y aprovechar lo que armé.

Primero debemos ponerle un nombre al plugin. Debe ser único, así que deberemos pasar un tiempo revisando «si no está tomado». De paso chequeamos que no haya sido inventado aún. A este le puse «No ads in Latest posts», qué creatividad que tengo!

Entonces, vamos a crear una carpeta que se llame «no-ads-in-latest-posts» y dentro un archivo php llamado también «no-ads-in-latest-posts.php».

Allí lo primero que tenemos que ingresar son los datos de nuestro plugin, que le servirá a WordPress para mostrar en la solapa de «Plugins» una vez lo instalen los bloggers, y todo va comentado:

/*
Plugin Name: No Ads in Latest Posts
Plugin URI: https://bitsignals.com/2008/01/24/como-hacer-un-plugin-para-wordpress/
Description: Avoid Showing Ads in Latest Posts
Author: Julian Yanover
Version: 1.0
Author URI: https://bitsignals.com/
*/

Aunque la info creo que se explica sola repasemos:

Plugin Name es el nombre de nuestro plugin.
Plugin URI es el post donde explicamos de qué va la herramienta, donde está la descarga, faq de instalación, etc.
Description es ni más ni menos la descripción, breve, del plugin.
Author somos nosotros, Version es versión, y Author URI es nuestra URL principal.

Luego, sería bueno colocar el siguiente texto también todo comentado, si es que queremos liberar el código claro:

/*  Copyright 2008  Julian Yanover  (email : julian@inicioglobal.com)
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
*/

Ahí lo único que tenemos que cambiar es la primera línea para poner sus datos.

Ahora vamos a comenzar con el plugin en sí. Vamos a guardar en una variable qué versión del plugin es la que tenemos.

// Version number
$noadsinlatp_db_version = "1.0";

Recuerden comentar todo lo que puedan (no se excedan tampoco) y respetar los estándares de programación de WP.

Ahora escribimos la primera función, que servirá para instalar el plugin:

// Install the plugin
function noadsinlatp_install() {
	global $noadsinlatp_db_version;

	$installednoadsinlatp = get_option( "noadsinlatp_db_version" );
	if ( $installednoadsinlatp != $noadsinlatp_db_version )
		update_option( "noadsinlatp_db_version", $noadsinlatp_db_version );
	else
		add_option("noadsinlatp_db_version", $noadsinlatp_db_version);
}

Lo que hace esta función simplemente, como no tenemos que modificar ni crear tablas, es guardar la versión del plugin. Si ya hay una versión anterior la actualiza, y sino agrega la «option» en la BD.

La siguiente función a escribir es la que revisa si el post debe mostrar publicidad.

// Check if the post is in the latest ones
function noadsinlatestposts1() {
global $post;
global $wpdb;
global $postnotinindex;
$postnotinindex = true;
$noadspostids = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE post_status = 'publish' and post_type = 'post' ORDER BY ID DESC limit 10");
foreach($noadspostids as $noadspostid) {
if ($noadspostid == $post->ID)
$postnotinindex = false;
}
}

Esta función (a la cual le falta la identación por problemas en el esquema del post simplemente) primero toma los últimos 10 posts que se han publicado, y luego los recorre para ver si el post que estamos viendo está entre ellos. Si es afirmativo, pondrá en false la variable postnotinindex. El limit está puesto en 10 porque es lo que yo quería, pero podemos cambiarlo a nuestro gusto. Incluso podríamos con la función de wordpress get_option (posts_per_page) obtener la cantidad de posts que se muestran por página y poner eso como límite, haciendo que los posts que salgan en portada sean los ad-free.

La última función que vamos a crear es la que se va a llamar desde el código de WordPress.

// The template calls this function
function noadsinlatestposts() {
	global $postnotinindex;
	return $postnotinindex;
}

La razón por la cual hice 2 funciones distintas, es que la primera hará el cálculo y es mucho más eficiente que se realice una vez sola, pese a que usemos la función muchas veces en el template.

Finalmente, hacemos la llamada para cuando se activa el plugin, y para que cada vez que cargue el header del blog se haga la comprobación que necesitamos.

// Calls the function to install the plugin
register_activation_hook('no-ads-in-latest-posts/no-ads-in-latest-posts.php', 'noadsinlatp_install');

// Calls the function to DO ALL THE PROCESS
add_action('get_header', 'noadsinlatestposts1');

Listo! Ahora, para usarlo, solo tenemos que subir la carpeta que tiene el plugin, activarlo desde el panel de control de WP, y agregar en el template donde queramos la función que realizamos, de la siguiente manera:

if ( noadsinlatestposts() ) {
   echo "Publicidad";
}

Si el post actual no está entre los últimos 10, imprimirá la publi. Podemos ejecutar esta función desde cualquier parte del template y cuantas veces queramos, sin sobrecargar mucho al servidor porque, de la forma en que programamos, se hace 1 sola vez la parte más pesada.

Cabe aclarar que si hacemos un plugin más «en serio» y complejo también deberemos agregar una readme y probablemente un language file.

Pueden descargar este sencillo plugin aquí.

Si quieren saber más sobre cómo crear un plugin, si se manejan bien en inglés, lo ideal es revisar a fondo la guía que WordPress nos pone a disposición.