¿Cómo crear plugins en WordPress? – Paso 1 de 3

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

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.

4 comentarios en “¿Cómo crear plugins en WordPress? – Paso 1 de 3”

  1. ¡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.

    1. 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.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Responsable de los datos: Luis María Jordán Muñoz | Finalidad: Responder a la solicitud que me envíes y ofrecerte información | Legitimación: Tu consentimiento de forma expresa | Destinatario: Nicalia mi proveedor de hosting | Derechos: Tienes derecho al acceso, rectificación, supresión, limitación, portabilidad y olvido, para más información, te dejo enlace a mi política de privacidad ... enlace

Scroll al inicio
Ir arriba