Forma Correcta de Modificar un Plugin

14 jul 2011, 15:31:07
Vistas: 46.7K
Votos: 23

¿Cuál es la mejor manera de modificar un plugin? Frecuentemente necesito hacer pequeños cambios en una o dos funciones dentro de un plugin grande. Esto es fácil de hacer, pero tengo que usar comentarios para marcar mis cambios y modificar el plugin nuevamente después de una actualización. Idealmente, me gustaría dejar el plugin intacto y hacer mis cambios en otro lugar, de manera similar a como lo hacemos con los temas y temas hijos. ¿Puedo crear un plugin que requiera el plugin padre y lo sobrescriba?

1
Comentarios

Consulta "Extender sin modificar". Considero que esta es la solución prácticamente mejor. Consulta este enlace para más detalles - La forma correcta de personalizar un plugin de WordPress

Eugine Joseph Eugine Joseph
17 sept 2015 09:34:38
Todas las respuestas a la pregunta 6
1
11

La forma "correcta" obviamente depende del plugin. Algunos plugins son más fáciles de editar que otros, pero la mayoría de los plugins pueden ser modificados por otros plugins.

Por ejemplo, si un plugin tiene una función enganchada a WordPress con una acción, entonces es sencillo para ti crear otro plugin que quite esa función con remove_action, y luego añada tu función de reemplazo. Este tipo de método te permitirá reemplazar funciones individuales en plugins con tus propias versiones modificadas, sin modificar el plugin original.

El mismo concepto funciona con los filtros, obviamente.

19 jul 2011 10:33:35
Comentarios

"Tan bueno" como la respuesta aceptada. Combinados son un ganador

mayersdesign mayersdesign
28 abr 2022 23:07:21
2

En mi opinión, el mejor enfoque es bifurcar (fork) el Plugin para mantener tus cambios, o enviar parches al desarrollador del Plugin para que tus cambios sean incorporados en el Plugin original.

Crear un "Plugin hijo" realmente no es fácil. El concepto de "Tema hijo" aplica más a los archivos de plantilla que se utilizan, más que a las funciones del Tema (y de hecho, tanto el archivo functions.php del Tema padre como del hijo se cargan, lo que causa problemas con archivos functions.php mal codificados tanto en el Tema hijo como en el padre).

14 jul 2011 15:40:28
Comentarios

Los tipos de cambios que estoy haciendo son específicos del sitio, por lo que no creo que hacer un fork o enviar parches sea apropiado. Definitivamente los tendré en cuenta para mejoras más generales en los plugins.

Mike Wheaton Mike Wheaton
14 jul 2011 15:57:10

Pero hacer un fork es básicamente lo que ya estás haciendo. Básicamente, esas son tus opciones: hacer fork o aplicar parches. @Chris_O da una buena manera de poder incorporar actualizaciones automáticas del repositorio principal, manteniendo tu fork del Plugin.

Chip Bennett Chip Bennett
14 jul 2011 16:08:23
2

La mejor manera sería simplemente clonarlo y cambiar el Nombre del Plugin en la cabecera y cambiar el nombre del directorio. De esta forma también podrías tener el original instalado pero no activado, por lo que seguirás recibiendo alertas cuando se publiquen actualizaciones.

<?php
/*
Plugin Name: Nombre Del Plugin
Plugin URI: http://URI_De_La_Pagina_Que_Describe_El_Plugin_Y_Actualizaciones
Description: Una breve descripción del Plugin.
Version: El Número de Versión del Plugin, ej: 1.0
Author: Nombre Del Autor Del Plugin
Author URI: http://URI_Del_Autor_Del_Plugin
License: Un "Slug" con el nombre de la licencia ej. GPL2
*/
?>
14 jul 2011 15:36:48
Comentarios

Esto todavía requiere revisar las nuevas versiones del plugin para encontrar los cambios (supongo que una herramienta de comparación de versiones ayudaría) y luego copiar esos cambios a mi plugin personalizado.

Supongo que podría descargar el plugin y usar SVN para fusionar los cambios con mi versión personalizada.

Mike Wheaton Mike Wheaton
14 jul 2011 15:42:19

Hay un enlace directo al archivo diff en el enlace del registro de desarrollo en la página de plugins. Por ejemplo, aquí está el diff generado desde W3 Total Cache

Chris_O Chris_O
14 jul 2011 15:49:13
0

Esto es relativamente fácil si el plugin está bajo control de código fuente con Git debido a la naturaleza distribuida de Git, pero muchos plugins de WordPress (y todos los del repositorio oficial) están en Subversion. Yo uso ramas de proveedor y svn_load_dirs.php si realmente necesito modificar un plugin, pero esto requiere un nivel de comodidad razonablemente alto con Subversion.

Si el plugin no expone ningún repositorio, recomendaría convertirlo tú mismo en un repositorio Git y aplicar manualmente las nuevas versiones.

Al final, los sistemas de control de versiones son la única forma sensata de volver a aplicar cambios a nuevas versiones del código fuente original.

17 jul 2011 15:23:02
0

Estoy de acuerdo con la respuesta de Annika Backstrom, pero me gustaría compartir mi solución preferida.

Dado que la mayoría de los plugins están bajo svn, utilizo una herramienta llamada git-svn para crear un espejo en git.

Luego, simplemente creo una rama y confirmo mis cambios allí.

Cuando el plugin se actualiza en el repositorio principal, simplemente hago pull desde el repositorio svn y fusiono los cambios en mi rama personalizada.

19 jul 2011 18:43:50
2

Como no se ha mencionado, puedes reemplazar cualquier función que sea "pluggable". Las funciones pluggable tienen este formato:

if (! function_exists('function_name')) {
    function function_name() {
         //...
    }
}

Entonces puedes simplemente redefinir la función tú mismo (en functions.php, Code Snippets o tu propio plugin).

Desafortunadamente, la mayoría de plugins no hacen que sus funciones sean pluggable; o en el mejor de los casos, solo algunas de sus funciones son pluggable.

28 abr 2022 18:19:51
Comentarios

¿Quieres decir que puedes sobrescribir una función específica en el plugin con una función personalizada y aún así recibir actualizaciones del plugin?

johny why johny why
30 jul 2024 23:27:37

@johnywhy Eso es correcto. Quiero decir, asumiendo que no sobrescriban tu código al decidir en la actualización no hacerlo "pluggable".

CubicInfinity CubicInfinity
1 ago 2024 18:08:21