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(); ?>
Gracias amigo, buen ejemplo, aun que no lo usare =P no requiero mas de los plugins que estan hechos =P….
Siempre es bueno saber las sintaxis de WordPress, para alguna modificación personalizada del sistema 😀
.
no me funciona. en vez de banner aqui pongo la url de la imagen? o un html
Hola rosa, tienes que poner la imagen en HTML (
) en el wp-admin en las opciones del plugin
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
Veo que tampoco se está creando la tabla mucho menos insertando el banner en la base de datos 🙁 Helpppp please
Muy buen post compañero, me sirvio muchisimo, Gracias
Esto es lo que estaba buscando, claro que primero tengo que aprender JavaScript y AJAX, pero ha favotios, muchas gracias.
Call to undefined function add_action() in C:\AppServ\www\banner\banner.php on line 72
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.
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.
Después de ver miles de paginas, debo felicitarte, tu explicación y ejemplo fue el mejor. Gracias!!!
Gracias 🙂
Una pregunta, cómo agrego un campo más a la base de datos y al formulario?
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.
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?
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
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?
un ejemplo de como introducir … porfa
Hola una pregunta, que se tendria que poner para cargar la imagen con el cargador multimedia de wordpress ?
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…
Gracias,
verifica si ya se creo la primera fila, derrepente no se a creado en la base de datos.
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!
Muchas gracias me funcionó a la perfección.