En este tutorial aprenderás a crear un plugin para WordPress, para el ejemplo haremos un plugin que coloque un banner donde se ponga el codigo del plugin, el contenido de este banner sera definidio en el panel de control de WordPress.
Paso 1
Creamos un archivo que se llame «banner.php», puede ponerle el nombre que desees, en este caso utilizaremos un solo archivo, así que no es necesario crear una carpeta pero si son mas archivos es necesario crear una carpeta y lo ubicamos dentro de la carpeta /plugins que esta en /wp-contents.
Paso 2
En las primeras lineas de banner.php definimos la información que se muestra en el panel de control, en el área de Plugins:
<?php
/*
Plugin Name: Nombre del plugin.
Plugin URI: Url del plugin.
Description: Descripcion.
Version: Numero de versiones 1,2,..10.
Author: Nombre del autor.
Author URI: Pagina personal del autor.
*/
Paso 3
Ahora crearemos una función que se llame «banner» esta almacenara el tag o shortcode para mostrar el banner. WordPress ofrece global $wpdb, que es una clase global para hacer consultas con la base de datos donde esta instalado WordPress, asi podemos llamar al prefijo de la instalacion de WP (wp_) para poder hacer consultas a la base de datos.
function banner(){
global $wpdb;
$table_name = $wpdb->prefix . "banner";
$saludo= $wpdb->get_var("SELECT banner FROM $table_name ORDER BY RAND() LIMIT 0, 1; " );
echo $banner; //todo se resume en esta linea, despues de seleccionar el valor de la tabla, lo muestra
}
Funciones de instalación y desinstalación del plugin
Crearemos una función especifica para instalar el plugin, esta función hará un query SQL para crear una nueva tabla donde se almacenara el contenido del banner que deseamos poner.
function banner_instala(){
global $wpdb;
$table_name= $wpdb->prefix . "banner";
$sql = " CREATE TABLE $table_name(
id mediumint( 9 ) NOT NULL AUTO_INCREMENT ,
banner text NOT NULL ,
PRIMARY KEY ( `id` )
) ;";
$wpdb->query($sql);
$sql = "INSERT INTO $table_name (banner) VALUES ('Banner aqui');"; // Banner aqui es el valor por defecto que tendra el campo.
$wpdb->query($sql);
}
Lo que hace es crear una tabla con un solo dos campos (id y banner), que almacenara el valor del banner propiamente dicho, este valor se definirá en la pagina de configuración del plugin que crearemos mas adelante.
Ahora para la función que desinstala un plugin, simplemente hacemos una consulta DROP a la tabla creada en la base de datos, para eliminarla.
function banner_desinstala(){
global $wpdb;
$table_name = $wpdb->prefix . "banner";
$sql = "DROP TABLE $table_name";
$wpdb->query($sql);
}
Nota: en ambas funciones siempre se llama a la clase global $wpdb para obtener el prefijo de las tablas y ejecutar querys, puedes leer mas de esta clase en este enlace
Paso 4
Haremos ahora la parte que se mostrara en la pagina de configuración de nuestro plugin en el menú de administración de WordPress, esto es básicamente un formulario que lo que hace es actualizar el valor del banner haciendo un query UPDATE a la tabla creada.
function banner_panel(){
global $wpdb;
$table_name = $wpdb->prefix . "banner";
if(isset($_POST['banner_inserta'])){
$banner=$_POST['banner_inserta'];
}else{
$banner= $wpdb->get_var("SELECT banner FROM $table_name ORDER BY RAND() LIMIT 0, 1; " );
}
// El formulario que esta en la pagina de configuracion del plugin
echo '<h2>Banner in Post</h2><br />'
.'<form method="post" action="" id="banner"><table class="form-table">'
.'<tbody><tr><th><label>Insert your Banner:</label></th><td>'
.'<textarea name="banner_inserta" cols="70" rows="2" id="banner_inserta" class="large-text code">'.$banner.'</textarea>'
.'</td></tr></tbody></table><br><input type="submit" name="enviar" value="Save Changes" class="button-primary" id="submit" />'
.'</form>';
if(isset($_POST['banner_inserta'])){
$sql = "UPDATE `".$table_name."` SET `banner` = '{$_POST['banner_inserta']}' WHERE `id`=1;";
$wpdb->query($sql);
}
}
Cuando se hace el llamado a $_POST[‘banner_inserta’] se esta solicitando mediante $_POST el valor del textarea que tiene como nombre ‘banner_inserta’, es aquí en este textarea donde se define el valor del banner a mostrar, también se rellana si el valor ya ha sido definido en la tabla anteriormente.
Para aplicar la función que creamos anteriormente, llamamos a add_options_page(), el numero 10 indica que solo lo podrá ver el administrador, puedes ver la pagina del Codex de menus de administración.
function banner_add_menu(){
if (function_exists('add_options_page')) {
add_options_page('Banner', 'Banner', 10, basename(__FILE__), 'banner_panel');
}
}
Paso 5
Por ultimo llamamos a add_action(), lo que hace esta función es aplicar todo lo anterior:
if (function_exists('add_action')) {
add_action('admin_menu', 'banner_add_menu');
add_action('activate_banner/banner.php','banner_instala');
add_action('deactivate_banner/banner.php', 'banner_desinstala');
}
Recuerda que los nombres deben estar bien escritos, tal como creaste el nombre de donde se ejecuta la función debe ir en activate y deactivate.
Para colocar el banner simplemente ponemos este código en cualquier archivo de nuestra plantilla y se mostrara:
<?php banner(); ?>
Fernando dice
Gracias amigo, buen ejemplo, aun que no lo usare =P no requiero mas de los plugins que estan hechos =P….
Edwind Pineda dice
Siempre es bueno saber las sintaxis de WordPress, para alguna modificación personalizada del sistema 😀
.
Rosa dice
no me funciona. en vez de banner aqui pongo la url de la imagen? o un html
Edwind Pineda dice
Hola rosa, tienes que poner la imagen en HTML () en el wp-admin en las opciones del plugin
Rosa dice
Gracias Edwind por el tutorial, pero sigue sin funcionarme. Cuando hago click en save changes, no envia ningun mensaje sólo transforma el html en algo así
No es necesario editar nada en banner.php, correcto?
Mil gracias
Rosa dice
Veo que tampoco se está creando la tabla mucho menos insertando el banner en la base de datos 🙁 Helpppp please
edjair dice
Muy buen post compañero, me sirvio muchisimo, Gracias
Santiago dice
Esto es lo que estaba buscando, claro que primero tengo que aprender JavaScript y AJAX, pero ha favotios, muchas gracias.
MAFUCLERO dice
Call to undefined function add_action() in C:\AppServ\www\banner\banner.php on line 72
Samuel dice
No funciona porque falta incluir entre la línea 8 y 9 el siguiente código:
require_once(ABSPATH . ‘wp-admin/includes/upgrade.php’);
Con esa pequeña modificación, ya se crea la base de datos!
Espero haber solucionado la duda. Saludos.
Samuel dice
El comentario anterior está mal, me equivoqué.
La solución es cambiar:
add_action(‘activate_banner/banner.php’,’banner_instala’);
add_action(‘deactivate_banner/banner.php’, ‘banner_desinstala’);
por:
register_activation_hook(__FILE__, ‘banner_instala’);
register_deactivation_hook(__FILE__, ‘banner_desinstala’);
De esta forma, al instalar el plugin se llama a la función banner_instala() y lo mismo a la hora de desinstalarlo.
Oscar dice
Después de ver miles de paginas, debo felicitarte, tu explicación y ejemplo fue el mejor. Gracias!!!
Edwind Pineda dice
Gracias 🙂
Oscar dice
Una pregunta, cómo agrego un campo más a la base de datos y al formulario?
Edwind Pineda dice
En la funcion de banner_instala(), ahi adentro de la variable $sql haces lo siguiente
$sql = » CREATE TABLE $table_name(
id mediumint( 9 ) NOT NULL AUTO_INCREMENT ,
(nombre del campo nuevo) text NOT NULL ,
banner text NOT NULL ,
PRIMARY KEY ( `id` )
) ;»;
y al formulario, solo creas un nuevo campo de texto y lo que este ahi lo guardas en el campo creado.
Oscar dice
Ups otra vez yo, una pregunta, cuando desactivo el plugin, todo el contenido se pierde, osea no se ve nada. Cuando lo vuelvo a activar o cuando borro la línea de código que puse en el theme donde quiero que se vea el mensaje, vuelve a verse el contenido. Alguna idea?
Edwind Pineda dice
bueno el plugin que estoy mostrando, cuando se desistala el plugin en realidad se esta eliminando la tabla de la base de datos, ya es depende de como hagas tu plugin
Oscar dice
Gracias Edwind por responder, bueno soy bien novatón en esto, osea que si desinstalo el plugin pero dejo la tabla, no tendré problemas de que el contenido del blog ya no se vea?
beto dice
un ejemplo de como introducir … porfa
Felipe dice
Hola una pregunta, que se tendria que poner para cargar la imagen con el cargador multimedia de wordpress ?
pia dice
Hola Edwind, buen post te felicito, pero una consulta el plugin se instala, crea la tabla pero cuando quiero mostrar el mensaje del banner con la función , no me muestra nada, muchas gracias por tu respuesta…
Edwind Pineda dice
Gracias,
verifica si ya se creo la primera fila, derrepente no se a creado en la base de datos.
Angel Hernandez dice
Buenas noches! gracias por la informacion! creo que me sera util para mi proyecto. Actualmente tengo una instalacion de wordpress para la web de mi negocio (solo intranet por los momentos), tambien tengo una base de datos MYSQL donde tengo todos los datos personales de los trabajadores y proveedores, lo que intentare hacer es crear una nueva seccion («creo» que lo mas facil seria con un plugin) donde el usuario al ingresar su numero de identificacion pueda visualizar toda la info guardado en la base de datos (diferente a la base de datos de wordpress, luego quizas exporte todo a una misma base de datos), quisiera saber si tienes alguna recomendacion o tutorial que me pueda ser util! muchas gracias de antemano!
Jhony dice
Muchas gracias me funcionó a la perfección.