Los plugins de WordPress pueden basarse sencillamente en un archivo php de unas pocas líneas. Pero también pueden contener cientos de ellos, vinculados entre sí, llamadas a funciones u otros archivos entre ellos, etc.
Es por ello que a la hora de modificar un plugin, tenemos que tener mucho cuidado con lo que hacemos para no provocar un desastre.
En esta entrada te voy a hablar de 4 métodos que puedes usar a la hora de modificar un plugin sin perder la capacidad de poder actualizarlo más tarde. Y además, te hablaré de una herramienta que nos permite crear un child plugin, del mismo modo que podemos crear child themes.
Métodos de modificación de plugins
Los Hooks
La forma más típica en la que podrás modificar un plugin es a traves de los hooks, es decir, las acciones y los filtros. Los hooks son "momentos" del código en los que podrás engancharte para añadir, reemplazar, modificar o eliminar funciones.
Si echas un vistazo al código del plugin, podrás encontrar cosas como do_action o apply_filters. Si el desarrollador ha tenido a bien incluir hooks en su código, será la mejor forma de interceptar el código original para aplicar tus propias modificaciones.
Por supuesto, estas modificaciones deben ir o bien en un plugin propio o bien en Code Snippets.
Sustitución de funciones
Sin ser obligatorio, pero si formando parte de unas buenas prácticas, a la hora de declarar funciones nunca está de más hacer la comprobación de si la función realmente existe. Es por ello que es posible que el autor del plugin haya encerrado todo en un if ( function_exists() ). Si es así, recuerda que debes hacer que tu plugin propio cargue primero. Hace esto puede ser un cristo del copón, y tendrás que utilizar seguramente el hook plugins_loaded y establecer diferentes prioridades. Una vez hecho esto, solo tendrías que declarar en tu plugin la misma función, con exactamente el mismo nombre. De este modo, podrás sustituir la función del plugin.
Las clases
A veces el desarrollador ha preparado todo para que su plugin pueda admitir extensiones. Esto es posible gracias a las clases definidas en el plugin. Mira bien la documentación del plugin o pregunta al desarrollador si ha preparado alguna clase o método para que el plugin admita extensiones.
Muy relacionado con esto, tenemos en GitHub un código (cortesía de Travis Smith) que nos permite utilizar la clase WPS_Extend_Plugin incluyendola en nuestro plugin para poder generar nuestra extensión llamando a los archivos en otra carpeta. Este código contiene un ejemplo de cómo extender por ejemplo Gravity Forms, JetPack o AddThis.
Fork o modificación del plugin
Llegado el caso, puedes crear tu propia variación del plugin (modificando la cabecera del mismo para que no se actualice del original). Una vez modificado, puedes subir tu propia variante al repositorio o bien, si el autor tiene el plugin en un repositorio de GitHub, puedes enviar tu modificación (o propuesta de modificación) para ver si el autor tiene a bien modificarlo y que de esta forma toda la comunidad pueda beneficiarse de ello. Muchas veces queremos implementar modificaciones que son realmente útiles a nivel general, y ¿qué mejor forma hay de contruibuir a la comunidad WordPress que participar en el propio desarrollo?
¿Se puede hacer un Child Plugin?
Si, se puede. Pero.... ¿realmente lo necesitas? Echa un vistazo a todo lo comentado anteriormente. Si aún así quieres crear una versión "hija" del plugin, puedes usar esta herramienta cortesía de Thomas Depole:
Esta herramienta te permite modificar un plugin de WordPress sin perder la capacidad de actualizarlo. Funciona de forma muy parecida a los Child Themes, es decir, puedes sobreescribir la ejecución de ciertos archivos (que existirán también en el propio plugin original) simplemente copiándolos.
El autor nos recuerda que ES IMPORTANTE que tengas en cuenta que no debes subir la propia herramienta a tu sitio ni tampoco debes activarlo desde el dashboard de WordPress.