• Cómo

    Cómo hacer un Plugin de WordPress

    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(); ?>

    Recuerda que puedes descargarte el plugin desde aqui, si tienes alguna duda hazmela saber en los comentarios.

  • Edwind Pineda

    Soy Autor/Editor de Tursos, estudio la Ingenieria de Sistemas y trabajo como programador PHP freelance, sigueme en Twitter o escribeme al m@edwindpineda.com .

  • Tal vez te interese