Hola amigos, ya que muchos de vosotros disponéis de páginas web creadas con la plataforma WordPress, en la entrada de hoy vamos a detallar los pasos necesarios para saber cómo crear plugins en WordPress con conexión a base de datos. Para este ejercicio, haremos un gestor de usuarios / clientes donde guardaremos sus datos de contacto.
Vamos a dividir la explicación en 3 entradas sencillas:
– Introducción: ¿Cómo crear plugins en WordPress? – Paso 1 de 3
– Base de datos: ¿Cómo crear plugins en WordPress? – Paso 2 de 3
– Look & feel: ¿Cómo crear plugins en WordPress? – Paso 3 de 3
Índice
Primeros pasos para crear plugins en WordPress.
Muchos se preguntan cómo crear plugins en WordPress y cuán difícil es, bien pues no te preocupes. En esta entrada te explicaré todo lo necesario.
Lo primero que vamos a hacer es crear un directorio nuevo para nuestro plugin y lo vamos a llamar «plugin-demo».
Para ello iremos a tuproyecto.com/wp-content/plugins/ y quedará tal cual tuproyecto.com/wp-content/plugins/plugin-demo.
A continuación vamos a crear un script llamado como el directorio de nuestro plugin con la extensión .php «plugin-demo.php«. Este script va a ser el que se ejecute siempre en primer lugar en nuestra aplicación (plugin).
Código fuente en el script plugin-demo.php
Vamos a poner información acerca de nuestro plugin, esta información aparecerá en el listado de plugins.
Como podéis ver todo queda a modo de comentario, pero luego se refleja en nuestra administración.
<?php /** * @package luisjordan.net */ /* Plugin Name: Luis Jordán - Demo Plugin URI: https://luisjordan.net Description: Plugin demo. Version: 1.0 Author: Luis Jordán Author URI: https://luisjordan.net Text Domain: Luis Jordán */
Si subimos esto que ya tenemos por FTP a nuestro site, veremos algo como esto.
Bien, vamos a mejorar la seguridad. Esto será utilizado por si alguien intenta cargar directamente la ruta del plugin en el navegador, para ello añadimos estas lineas.
// Make sure we don't expose any info if called directly if ( !function_exists( 'add_action' ) ) { echo 'Hi there! I\'m just a plugin, not much I can do when called directly.'; exit; }
Si guardamos y cargamos por navegador la URL del script «tuproyecto.com/wp-content/plugins/plugin-demo/plugin-demo.php«, veremos este mensaje.
Siempre es recomendable definir constantes que posteriormente podremos utilizar. No hace falta que entremos en detalle de qué hace cada una de estas constantes ya que es bastante obvio.
define( 'DEMO_CONTROL_HOSTING_VERSION', '1.0' ); define( 'DEMO__MINIMUM_WP_VERSION', '4.0' ); define( 'DEMO__PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); define( 'DEMO_DELETE_LIMIT', 100000 ); define( 'RKR_BLOG_NAME', get_bloginfo('name') ); define( 'RKR_BLOG_URL', get_bloginfo('url') ); define( 'RKR_PLUGIN_PATH', RKR_BLOG_URL.'/wp-content/plugins/plugin-demo' );
También indicamos cual es el script que debe ejecutar la aplicación para poder instalar las tablas en base de datos, llamadas a clases CSS, JS, etc.
// Load libreries $plugin_demo = array( 'version' => '1.0.0', 'filename' => __FILE__, 'path' => dirname(__FILE__), 'initializer' => dirname(__FILE__) . '/initializer.php' );
Creamos el método que nos permitirá desactivar el plugin.
// Set plugin like dissabled function demo_deactivate_plugin() { deactivate_plugins(plugin_basename(__FILE__)); if(!empty($_GET['activate'])) { unset($_GET['activate']); } }
Definimos la versión mínima de WordPress soportada. Si la plataforma no tiene una versión como mínimo la indicada, desactivamos el plugin antes de que de cualquier tipo de error.
// Check for minimum supporter WP version if(version_compare(get_bloginfo('version'), '4.6', '<')) { add_action('admin_notices', 'demo_wp_version_notice'); // deactivate the plugin add_action('admin_init', 'demo_deactivate_plugin'); return; }
Definimos la versión mínima de PHP soportada.
// Check for minimum supported PHP version if(version_compare(phpversion(), '5.3.3', '<')) { add_action('admin_notices', 'demo_php_version_notice'); // deactivate the plugin add_action('admin_init', 'demo_deactivate_plugin'); return; }
Creamos la función donde se mostrará el error en caso de no soportar las versiones de PHP o WordPress.
// Display WP version error notice function demo_wp_version_notice() { $notice = str_replace( '[link]', '<a href="//www.tuproyecto.com/por-definir" target="_blank">', __('Demo gestión clientes plugin requires WordPress version 4.6 or newer. Please read our [link]instructions[/link] on how to resolve this issue.', 'Luis Jordán') ); $notice = str_replace('[/link]', '</a>', $notice); printf('<div class="error"><p>%1$s</p></div>', $notice); }
// Display PHP version error notice function demo_php_version_notice() { $notice = str_replace( '[link]', '<a href="www.tuproyecto.com/por-definir#php_version" target="_blank">', __('Demo gestión clientes plugin requires PHP version 5.3.3 or newer. Please read our [link]instructions[/link] on how to resolve this issue.', 'Luis Jordán') ); $notice = str_replace('[/link]', '</a>', $notice); printf('<div class="error"><p>%1$s</p></div>', $notice); }
Comprobamos que disponemos del script que va a llamar a las clases para instalar las tablas, css, etc ya comentado.
// Check for presence of core dependencies if(!file_exists($demo_gestion_clientes['initializer'])) { add_action('admin_notices', 'demo_core_dependency_notice'); // deactivate the plugin add_action('admin_init', 'demo_deactivate_plugin'); return; }
En caso de no disponer de lo necesario, lanzamos error.
// Display missing core dependencies error notice function demo_core_dependency_notice() { $notice = __('Demo gestión clientes cannot start because it is missing core files. Please reinstall the plugin.', 'Luis Jordán'); printf('<div class="error"><p>%1$s</p></div>', $notice); }
Por último lanzamos el script encargado de realizar las instalaciones necesarias.
// Initialize plugin require_once($demo_gestion_clientes_plugin['initializer']);
Desarrollando initializer.php – script que llama a las clases a utilizar.
Lo hemos llamado initializer.php pero podemos utilizar cualquier otro nombre para este script, eso si, tal y como sea nombrado se ha de llamar desde nuestro script inicial (plugin-demo.php).
El código fuente de este script va a ser corto, más que nada actúa como puente y la ubicación de este es en el directorio raíz del proyecto.
<?php if(!defined('ABSPATH') || empty($plugin_demo)) exit; define('DEMO_VERSION', $plugin_demo['version']); require_once "class/demo_class_install.php"; new demo_admin;
¿Cómo añadir nuestro plugin en el menú de administración de WP?
Este paso es bastante sencillo, desde initializer.php estamos llamando a un directorio donde tenemos la clase que se encarga de hace esto mismo class/demo_class_install.php.
Aquí vamos a añadir el siguiente trozo de código.
<?php class demo_admin { var $page; var $pluginName = 'DEMO'; public function __construct() { add_action( 'admin_menu', array( $this, 'demo_adminMenu' ) ); } public function demo_adminMenu(){ add_menu_page('Control Clientes', 'Control Clientes', 'manage_options', 'hosting_control', 'hosting_control', ''); //PLUGIN_PATH.'/assets/img/icon.png' add_submenu_page('clients_control', 'Clients', 'Clients', 'manage_options', 'list_clients', 'list_clients'); add_submenu_page('hosting_control', 'Services', 'Services', 'manage_options', 'list_services', 'list_services'); //install db register_activation_hook( __FILE__, 'crd_install' ); //uninstall db register_uninstall_hook( __FILE__, 'crd_uninstall' ); } }
Tras añadir estás líneas, veremos algo como esto.
Desde este momento, si os fijáis ya podemos ver el plugin en nuestro menú de administración.
Lo que haremos en un siguiente post será explicar cómo crear las tablas necesarias en nuestra base de datos.
Versiones utilizadas, tiempo y dificultad de desarrollo:
Plataforma: WordPress 4.9.2
Tiempo de desarrollo: 20 minutos
Dificultad: Iniciación.
¡Genial, gracias! Este post me ha resultado súper útil, es justo el tipo de info que andaba buscando. Además, me ha quedado muy clarito porque es una explicación práctica y precisa, ¡así da gusto!
Me guardo vuestro blog para futuras dudas, que no me cabe duda de que las tendré, jeje. Un saludo y muchas gracias otra vez.
Hola CubeNode, gracias por tu comentario.
Me alegra saber que te ha sido útil.
Un saludo!
El artículo es muy bueno, pero aún no has publicado el paso 2 y 3 no¿?
Hola Nando, es algo que he ido dejando y la verdad es que entre una cosa y otra no me he puesto con ello.
Promento avanzar lo antes posible, suscríbete al blog para estar al tanto de las entradas.