Cómo crear un plugin hijo en WordPress
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?

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.

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

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.
