Ene
Cómo hacer un plugin para WordPress
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.
15 comentario/s hasta el momento
25 de enero de 2008 a las 12:14 pm
Es un tutorial estupendo, se agradece que lo compartas. Si no tienes inconveniente lo reproduciré (con los créditos claro) en nuestro blog de Ayuda WordPress 😉
25 de enero de 2008 a las 12:22 pm
Por supuesto que no hay problema Fernando, y gracias!
25 de enero de 2008 a las 12:27 pm
26 de enero de 2008 a las 6:31 am
26 de enero de 2008 a las 7:04 am
26 de enero de 2008 a las 10:16 pm
27 de enero de 2008 a las 7:46 pm
buen tutorial 😀
28 de enero de 2008 a las 4:47 am
28 de enero de 2008 a las 2:18 pm
23 de febrero de 2008 a las 5:47 pm
Hola Julián,
Bueno lo primero decir que es un post muy interesante.
Y lo segundo, animarte para que realices una renovación (o crees otro muy similar) del plugin Shylock AdSense, ya que el original con la nueva funcionalidad para la administración de anuncios de AdSense no funciona (supongo que al cambiar el código para los anuncios el plugin se ha desactualizado) y no veo «ganas» por parte de su autor para actualizarlo.
Es una idea con la que puedes ayudar a muchos bloggers.
Ánimo y tienes todo mi apoyo en caso de que siga adelante tu idea 😉
Saludos!
24 de febrero de 2008 a las 2:05 am
Hola Ruben, primero gracias. Me metí en el blog del Shylock AdSense y encontré este post así que se ve que pronto lo actualizará. Igualmente nadie le dejó ningún comentario ahí avisándole de que no funciona con el nuevo sistema de administración de anuncios… no será que te pasa a vos nada más?
En todo caso te recomiendo este otro plugin que parece que ofrece algo parecido: Who sees ads?.
Como verás, no hay mucha necesidad de que haga un plugin para AdSense, aunque me gustaría 🙂
25 de febrero de 2008 a las 9:44 pm
Ok!
Muchas gracias Julián,
No había visto ese post (lo esperaba en la página dedicada a Shylock Adsense de ese mismo blog) tocará esperar, de mientras me miraré el que comentas.
Saludos!
22 de abril de 2010 a las 12:24 pm
muchas gracias, me será de gran ayuda, justo ahora quiero desarrollar mi primer plug-in…
saludos,
Teorico..
19 de agosto de 2010 a las 11:34 am
Buenos días, yo no soy de PHP pero creo ver en tu plug-in que declaras una variable dentro de una función y luego accedes a esa variable dentro de otra función (eso es lo que me pareció leer en el código).
Por otro lado me gustaría sugerir si es posible, que no tengo ni idea si en la consulta sql en vez de extraer los 10 últimos post por que no pasas el id del post quizás podrías cargar la complejidad a la consulta sql y ahorrarte bastante código.
Volviendo al tema de la variable imagino que como toda función será capaz de devolver algo y no modificarlo dentro y acceder de forma «extraña» al mismo.
Weno un saludo y perdona!
23 de marzo de 2011 a las 6:30 pm
Muy práctico, detallo y bien armado.
Me gusto mucho el tutorial que te armaste amigo, voy a usarlo para algunas ideas que tengo en mente y aplicarlos a mi blog.
Saludos y gracias