Oferta SiteGround Black Friday

10 habilidades básicas del desarrollador de plugins WordPress

desarrollador wordpress

Los plugins son gran parte de la grandeza y belleza de WordPress y crear tu propio plugin te dará un conocimiento y libertad que no encontrarás si simplemente te limitas a usar lo que otros crean.

Ahora bien, si te lanzas al desarrollo de plugins WordPress no está de más que tengas en cuenta esto 10 consejos básicos para la creación de plugins:

:: 1. Creando el plugin ::

El primer paso es crear la carpeta de tu plugin en el directorio /wp-content/plugins. Una vez hayas creado la carpeta debes situar los archivos de tu plugin en esa carpeta. Debe haber un archivo principal del plugin, y los nombres de los archivos deben tener solo letras y guiones (-) si quieres separar palabras, no uses otros signos de puntuación ni espacios.

Un nombre tipo sería algo así: plugin-seo-sencillo.php

El archivo principal del plugin debe tener la siguiente estructura para que WordPress lo identifique como plugin:

<?php
/* Plugin Name:  Nombre del plugin
Plugin URI: 
Description: Descripción de lo que hace el plugin una vez activo.
Version: 1.0
Author URI: https://ayudawp.com
Author: Nombre del autor
License: GPL2
*/ 

Una vez guardes los cambios, aunque no tenga aún nada el plugin, ya se verá en la página de plugins de WordPress.

:: 2. Activación y desactivación del plugin ::

Los plugins se pueden activar haciendo clic en el enlace «Activar» de la lista de plugins. En un plugin básico no tienes que hacer nada al activarlo. Pero un plugin avanzado requerirá tareas como lanzar los ajustes del plugin, crear tablas, etc., así que vamos a ver cómo podemos gestionar la activación y desactivación de un plugin.

Gancho de activación del plugin

WordPress ofrece una función denominada register_activation_hook que se lanza al activar un plugin. Podemos añadir funciones personalizadas que se ejecuten al activar el plugin usando este método. Un ejemplo sería el siguiente:

function wp_sample_activation() {
}
register_activation_hook(__FILE__, 'wp_sample_activation');

Tienes que definir la ruta del archivo que contenga la función de activación como primer parámetro y el nombre de la función como segundo parámetro.

Si la función de activación está dentro del archivo principal del plugin puedes usar _FILE_ como en el ejemplo anterior. Dentro de la función de activación también puedes realizar tareas como validaciones, inicializaciones y creación de tablas.

Gancho de desactivación del plugin

Podemos gestionar la desactivación de un plugin con register_deactivation_hook, utilizando una sintaxis similar a la de la activación. En la función de desactivación también puedes realizar acciones adicionales como limpiar los recursos del plugin, de los ajustes y las tablas.

function wp_sample_deactivation() { 
} 
register_deactivation_hook(__FILE__, 'wp_sample_deactivation'); 

:: 3. Creación de tablas personalizadas ::

La estructura de la base de datos de WordPress y es muy flexible, y puedes implementar la mayoría de las funcionalidades personalizadas usando las tablas que estén disponibles.

No obstante, en ocasiones puede que prefieras incluir sistemas más avanzados, como carros de compra, sistemas de gestión de tareas, suscripciones, etc.

En estos casos debes saber cómo y cuando crear tablas personalizadas. Lo primero es tener en cuenta los requisitos de tu proyecto y tratar de utilizar la tabla y meta tablas wp_options para almacenar los datos específicos de tu proyecto. Si consideras que esas tablas no tienen la estructura necesaria como para implementar la funcionalidad que necesites entonces crea tablas personalizadas usando el siguiente método:

global $wpdb; 
$wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}sample_table"); 
$sql1 = "CREATE TABLE {$wpdb->prefix}sample_table ( id int(11) NOT NULL AUTO_INCREMENT, 
                                                       activation_code varchar(255) NOT NULL, 
                                                       email varchar(75) NOT NULL, 
                                                       status int(11) NOT NULL, PRIMARY KEY  (id) ) 
         ENGINE=InnoDB AUTO_INCREMENT=1;"; 
require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); 
dbDelta($sql1);

Primero comprobamos si existe la tabla antes de crearla. Puedes decidir crear la tabla en el momento de la activación, dependiendo de lo que necesites. En el ejemplo verás que se utiliza {$wpdb->prefix} antes de crear el nombre de la tabla. Esto es debido a que, normalmente, las tablas de WordPress empiezan con el prefijo wp_. Esto puedes cambiarlo cuando instalas WordPress así que es mejor no añadir manualmente el prefijo wp_ ya que puede ser otro, y así nos aseguramos que se adaptará a lo que exista.

Usando {$wpdb->prefix} obtendrás el prefijo definido en la instalación de WordPress, así que siempre usa esta sintaxis para crear las tablas.

Aunque utilices la función $wpdb->query para crear las tablas es recomendable usar la función dbDelta, ya que compara la estructura de tablas actual. No se carga por defecto así que debes incluirla al principio del archivo.

:: 4. Incluyendo Scripts y estilos ::

Aunque solo hagas eco de scripts y estilos es recomendable añadir los scripts usando la función wp_enqueue_script. Esta función comprueba si están disponibles los archivos y las dependencias con otros scripts. El siguiente ejemplo muestra el modo de utilizar la función wp_enque_script:

add_action('wp_enqueue_scripts', 'sample_scripts');
function sample_scripts() {
  wp_enqueue_script('jquery');
  wp_register_style('sample_style', plugins_url('styles.css', __FILE__));
  wp_enqueue_style('sample_style');
  wp_register_script('jqueryUICore', plugins_url('ui/jquery.ui.core.js', __FILE__),array(“jQuery”));
  wp_enqueue_script('jqueryUICore');
  $config_array = array(“sample_name”=>”sample_value”]);
  wp_localize_script('jqueryUICore', 'sampleData', $config_array);
} 

Primero usas wp_register_style para registrar el archivo de estilos y wp_enqueue_style para incluir el archivo. También hay que indicar la ruta e identificador único del archivo de estilos. Luego se incluyen los scripts usando la función wp_enqueue_script. Si depende de otros scripts puedes mencionarlos en el tercer parámetro. En el ejemplo se ha añadido una dependencia de jQuery.

Para terminar, puedes añadir datos que se usarán dentro de scripts concretos usando la función wp_localize_script. Puedes incluir los scripts donde quieras pero siempre usa las funciones wp_enqueue_scripts y wp_enqueue_styles.

También asegúrate de utilizar la acción admin_enqueue_script en vez de wp_enqueue_script para la parte de administración.

:: 5. Creando shortcodes ::

Los shortcodes son bloques predefinidos de código que puedes usar en cualquier parte. Es fundamental aprender a usar shortcodes si quieres ser desarrollador de plugins ya que añaden elementos dinámicos a páginas personalizadas.

Puedes crear shortcodes usando una sintaxis como la siguiente:

add_shortcode("nombre_shortcode", "función_shortcode"); 
function función_shortcode() { 
  return “<input type=’button’ value=’Compartir’ /> “; 
}

Asignas el nombre y función del short code en la función add_shortcode, y luego defines el tipo de contenido que quieres mostrar dentro de la función. El short code anterior crear un botón HTML simple con el texto «Compartir»

Para utilizar el shortcode en páginas, entradas o plugins y que muestren el botón usarías la sintaxis siguiente:

[nombre_shortcode/]

:: 6. Filtrado de contenido ::

Es fundamental tener en cuenta cómo filtrar el contenido de una entrada o página a la hora de desarrollar un plugin que vaya a usarse en un blog. Echa un vistazo al siguiente ejemplo:

function sample_content_filter($content) { 
  $banners = “HTML para banners”; 
  $author = “HTML para información del autor”; 
  return $banners.$content.$author; 
} 
add_filter( 'the_content', 'sample_content_filter' );

Cada vez que se visualiza una página o entrada el contenido pasará por la función. Puedes modificar, añadir o quitar contenido como en el ejemplo anterior.

También puedes usar tags condicionales de WordPress para filtrar el contenido en páginas concretas. El siguiente código filtra el contenido en una página si es una entrada simple:

function sample_content_filter($content) {
  if(is_single()){ 
  return $banners.$content.$author; 
  } 
} 

:: 7. Trabajando con Ajax ::

Lo ideal sería que sepas cómo usar Ajax en WordPress para poder así ofrecer contenido interactivo a los usuarios de tu plugin. Un modo fantástico de conseguir este tipo de cosas es usar la funcionalidad Ajax de jQuery.

$.post("admin-ajax.php", { action:"sample_ajax_action" }, 
function(result, textStatus) { 
}, "json");

La parte más importante del código Ajax anterior es la acción. Se utilizará en el código de WordPress para identificar la petición. Además, todas las peticiones Ajax deberían enviarse al fichero admin-ajax.php.

function sample_ajax_action() { 
echo json_encode($your_result_array); exit; 
} 
add_action('wp_ajax_nopriv_sample_ajax_action', 'sample_ajax_action'); 
add_action('wp_ajax_sample_ajax_action', 'sample_ajax_action');

Puedes ver que el mismo nombre de acción utilizado en Ajax se usa aquí con los prefijos wp_ajax_nopriv_ y wp_ajax_. wp_ajax_ se usa para los usuarios conectados y para los usuarios no conectados usamos wp_ajax_nopriv_.

:: 8. Escribiendo peticiones SQL ::

En WordPress tenemos que tener en cuenta la seguridad de nuestras peticiones (queries) para evitar inyecciones SQL. Podemos utilizar el método prepare para filtrar los datos de usuario antes de aplicarlos a la petición. También debes filtrar los datos suministrados por los usuarios con el siguiente código antes de procesarlos:

$wpdb->query($wpdb->prepare("update wp_sample_table set status=1 where activation_code=%s and status=%d",$activationCode,$status));

Como en el código anterior, asigna siempre caracteres de escape a SQL y valores variables al final, para así filtrar los datos antes de ejecutarlos en SQL.

:: 9. Añadir cajas de ajustes ::

WordPress ofrece un paquete estándar de campos, tales como título, contenido, imagen y extracto en el pantalla del editor de contenidos. Si queremos que haga algo más necesitaremos campos personalizados. Y no vale solo con la sección de campos personalizados, ya que solo ofrece cajas de texto. Tendremos que añadir campos diferentes si queremos casillas de selección, botones de radio, desplegables y cosas así.

Podemos crear fácilmente cajas de ajustes con los que ofrecer campos adicionales como en el siguiente ejemplo:

add_action('add_meta_boxes', 'add_custom_fields_box');
function add_custom_fields_box() {
  add_meta_box('custom_fields_box_id', 'Custom Info', 'display_custom_info_box', 'post', 'normal', 'high');
}
function display_custom_info_box() {
global $post;
$html = "<table><tr><td>Selección personalizada</td><td><input id='custom_checkbox' type='checkbox' name='custom_checkbox'  /></td></tr> <tr><td>Selección personal</td><td><select name='custom_select'  > <option>Ajuste 1</option> </select></td></tr> <tr><td>Subir archivo</td><td><input id='custom_file' type='file' name='custom_file'  /></td></tr></table>";
echo $html;
}

Los valores de los campos se guardarán como campos personalizados en la tabla wp_options. No te olvides de añadir como prefijo un guión bajo (_) para evitar duplicados en la sección de campos personalizados.

:: 10. Uso de nonces para la seguridad del plugin ::

La seguridad debe ser tu principal preocupación a la hora de crear plugins WordPress. No debes fiarte de los datos facilitados por los usuarios, y siempre debes validar los datos antes de ejecutarlos.

Para ello, WordPress ofrece un concepto denominado «nonce«, que crea un valor nonce, o «número arbitrario usado una sola vez» (del inglés «number used once«), cuando se genera un formulario, de manera que podamos comprobar si existe el mismo valor nonce cuando se envíe el formulario y, de este modo, asegurarnos de si es una petición válida … o no.

Puedes crear un valor «nonce» usando el código siguiente:

wp_nonce_field('sample_frm_nonce', 'sample_frm_nonce');

El primer parámetro es un identificador único y el segundo parámetro se utilizará como nombre de campo en el formulario oculto. Una vez se envíe el formulario puedes validar el valor nonce usando el siguiente código:

if (!isset($_POST['sample_frm_nonce']) || !wp_verify_nonce($_POST['sample_frm_nonce'], 'sample_frm_nonce')){
  return; 
}

Si no se valida el nonce no se seguirá procesando la petición.


Y creo que por hoy está bien. Por supuesto, la API de WordPress contiene muchísimo más que debes saber para crear plugins, pero estos 10 puntos son fundamentales y – creo que – una buena base desde la que partir si quieres ser un buen desarrollador de plugins WordPress.

Para todo lo demás … ¡te toca!, nos lo cuentas en los comentarios.

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en los emoticonos para valorarlo!

Promedio de puntuación 4.8 / 5. Total de votos: 5

Hasta ahora ¡no hay votos!. Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en las redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Ayúdame a mejorar este contenido!

Por favor, dime, ¿cómo puedo mejorarlo?

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

AVISO: Esta publicación es de hace 3 años o más. Si es un código o un plugin podría no funcionar en las últimas versiones de WordPress, y si es una noticia podría estar ya obsoleta. Luego no digas que no te hemos avisado. ¡Ah! ¿te funciona? pues entonces no he dicho nada :)

Sobre el autor

2 comentarios en “10 habilidades básicas del desarrollador de plugins WordPress”

  1. Roberto Manrique

    Hola fernando, no sé si leerás algún día este post, si lo haces, te lanzo la pregunta. Si desarrollo un plugin para wordpress, hay alguna forma de saber en cuantos wordpress está instalado. Evidentemente Para la activación le mandaría una clave a quien compre la licencia de uso del plugin. Eso es lo que he visto que hacen, soy muy novato y tengo muchas dudas. Muchas gracias

Deja un comentario

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

Información base sobre privacidad:
- Responsable: Fernando Tellado ([email protected])
- Fin del tratamiento: Moderación de comentarios para evitar spam
- Legitimación: Tu consentimiento
- Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal
- Derechos: Acceso, rectificación, portabilidad, olvido

 

Scroll al inicio