Cómo crear un plugin hijo en WordPress

19 mar 2011, 12:19:10
Vistas: 19.9K
Votos: 11

Me gustaría crear un plugin hijo...

Explicación:

Tengo un plugin padre llamado X. Este funciona de manera independiente (como otros plugins existentes).

Ahora he decidido añadir algunas funcionalidades extra a ese plugin X (piensa en ello como una actualización). Por lo tanto, quiero crear funcionalidades adicionales mediante otro plugin Y, que dependerá (y heredará) de X.
Este plugin Y no funcionará sin el plugin X.

¿Cómo puedo hacer esto?

0
Todas las respuestas a la pregunta 3
1
20

La mejor manera de hacer esto es que tu plugin X esté desarrollado con sus propios hooks para acciones y filtros, de modo que nuevos plugins (en tu caso Y) puedan interactuar con las funciones y datos del plugin X. Definir tus propios hooks es bastante fácil y sencillo.

Hook de Acción

Del codex:

Las acciones son los hooks que el núcleo de WordPress ejecuta en puntos específicos durante la ejecución, o cuando ocurren eventos específicos. Tu plugin puede especificar que una o más de sus funciones PHP se ejecuten en estos puntos, utilizando la API de Acciones.

Ejemplo de un nuevo hook de acción:

function whatever(){
   //código normal que ejecutas habitualmente
  do_action('Nombre-De-Tu-Hook-De-Accion', $args1, $args2)
  //código normal que ejecutas habitualmente
}

Ahora podemos interactuar con esa función y usar sus argumentos ($args1,$args2) utilizando el hook 'Nombre-De-Tu-Hook'

add_action('Nombre-De-Tu-Hook-De-Accion', 'funcion_de_callback_del_hook');

Hook de Filtro

Del codex:

Los filtros son los hooks que WordPress lanza para modificar textos de varios tipos antes de añadirlos a la base de datos o enviarlos a la pantalla del navegador. Tu plugin puede especificar que una o más de sus funciones PHP se ejecuten para modificar tipos específicos de texto en estos momentos, usando la API de Filtros.

Ejemplo de un nuevo hook de filtro:

function whatever(){
   //código normal que ejecutas habitualmente
   $output = apply_filters('Nombre-De-Tu-Hook-De-Filtro', $output, $args1, $args2)
  //código normal que ejecutas habitualmente
}

Ahora podemos interactuar con esa función, filtrar $output y usar sus argumentos ($args1,$args2) utilizando el hook 'Nombre-De-Tu-Hook-De-Filtro'

add_filter('Nombre-De-Tu-Hook-De-Filtro', 'funcion_de_callback_del_hook');

Un buen ejemplo de esto sería Contact Form 7

  • Contact Form 7 - Complemento para Campaign Monitor
  • Contact Form 7 Dynamic Text Extension
  • Contact Form 7 Calendar
  • Contact Form 7 Textarea Wordcount
  • Contact Form 7 Customfield in mail
  • Contact Form 7 to Database Extension

y muchos más que todos (la mayoría) son plugins que extienden la funcionalidad de Contact Form 7 basándose en sus hooks.

19 mar 2011 13:23:10
Comentarios

Gracias. Esta es una solución muy detallada y bien escrita. Mi único comentario es que podrías usar un nombre más claro para Function whatever() ... aún así es una gran respuesta, GRACIAS

Metagrapher Metagrapher
2 oct 2015 18:21:36
2

Crea algunos hooks en tu plugin padre a los que el plugin hijo pueda conectar sus propias funciones. También envuelve el plugin hijo en if(function_exists('función-del-plugin-padre')) o class_exists si es una clase.

19 mar 2011 13:22:14
Comentarios

No creo que esta sea una buena solución, ya que toda la razón por la que uno querría tener un plugin hijo en lugar de modificar el plugin original es para no tener que modificar el plugin original (o "padre"). Los hooks en el plugin padre para extensibilidad son buenos, pero la solución del que pregunta no podría depender de ellos. (...como yo y muchos otros seguramente estamos en la misma situación).

Metagrapher Metagrapher
2 oct 2015 18:20:10

@Metagrapher OP indica que quiere poder crear un plugin hijo de un plugin, así que era más sobre cómo estructurar las cosas para que un plugin sea capaz de ser extensible mediante plugins hijos.

Ashfame Ashfame
19 ago 2016 19:06:23
1

Acabo de pasar por esto mismo y tenía tantos cambios que no podía simplemente sobrescribir las acciones.

Creé esta herramienta que te permite crear un plugin hijo como un tema hijo. Puedes hacer actualizaciones al plugin y seguir actualizándolo sin perder tus cambios.

Estoy publicando esto aquí porque está relacionado y espero que sea útil para la siguiente persona que se enfrente a este problema.

https://github.com/ThomasDepole/wordpress-child-plugin-tool

26 mar 2020 21:54:18
Comentarios

Encontré esto útil pero necesito asegurarme de que aún funcione. Fue desarrollado hace 3 años y ahora estamos en la versión 6.3 de WordPress.

Harsha Harsha
18 ago 2023 15:47:16