Modificar archivos principales de WordPress


21

¿Por qué?

A veces, una solución fácil para alterar el comportamiento de WordPress en sí mismo o un complemento podría ser alterar los archivos del complemento o WordPress directamente. Cuando surge una idea así, la respuesta habitual es:

No hackear el núcleo.

¿Por qué generalmente es una mala idea cambiar los archivos principales?

¿Considerar?

A veces, sin embargo, las cosas que pueden ser críticas para un sitio son simplemente imposibles de hacer, de una manera agradable sin alterar los archivos principales. En una situación así, ¿qué debe tener en cuenta antes de seguir adelante y comenzar a hackear el núcleo?

¿Cómo?

Ha considerado todas las opciones, pero la única solución es hackear archivos principales. ¿Cómo deberías hacer esto? ¿De qué manera tener un núcleo alterado influirá en los flujos de trabajo, como la actualización?


1
Estoy totalmente en desacuerdo con cualquier recomendación para hackear el núcleo, ya que aún no he encontrado una sola cosa con la que no pueda evitarme. Las únicas personas que tienen un núcleo de piratería comercial para un sitio de producción son aquellas que no tienen absolutamente ninguna necesidad de leer nada sobre este tema, ya que probablemente ya estén en el equipo central de WordPress. Explicar a las personas cómo hacerlo simplemente le da a 99 de cada 100 personas que definitivamente no deberían hacerlo una forma de racionalizar sus decisiones. Y realmente odiaría ver eso habilitado aquí. JMTCW.
MikeSchinkel

Como seguimiento, aquí hay un ejemplo de una pregunta que fue la primera respuesta "No es posible" y respondí con un ejemplo que muestra cómo: wordpress.stackexchange.com/questions/972/#984 Hay (casi siempre) una forma de hazlo sin hackear el núcleo.
MikeSchinkel

2
Si cambia el núcleo, tendrá que volver a hacer los cambios después de cada actualización, y hará que su instalación no sea estándar, por lo que será más difícil para las personas ayudarlo. Simplemente cree un complemento, un widget, una plantilla, un gancho o cualquiera de los muchos métodos que Wordpress le proporciona para no tener que cambiar el núcleo.
Wadih M.

Wadih es correcto. He realizado cambios en algunos de los archivos principales para corregir / mejorar / personalizar varias cosas y siempre me he sentido frustrado al actualizar porque tengo que verificar los cambios y aplicar mis parches a los nuevos archivos. Esto es aún más frustrante cuando los nuevos archivos son muy diferentes de los antiguos y las ubicaciones de los cambios ya no son obvias (o incluso están presentes).
Synetech

1
Es como temía; a veces, cuando no hay enganches refinados (como modificar Mis sitios), los únicos enganches que funcionan para el truco de salida almacenada son admin_body_classy lo admin_footerque significa capturar toda la página . Acabo de probarlo y hay que buscar> 2 MB de contenido para la sección correspondiente, luego analizar y modificar antes de la salida. O bien, puedo agregar una línea de código a la parte derecha my-sites.phpy usar una herramienta de diferencias para aplicar el parche después de las actualizaciones (suponiendo que se haya modificado). Es realmente difícil argumentar en contra de modificar el núcleo en escenarios como este.
Synetech

Respuestas:


21

Si debe hackear el núcleo, considere hacerlo de una manera que lo haga extensible para otros.

Agregar un gancho de acción

Nueve de cada diez veces, podría hacer lo que quisiera si solo hubiera una do_actionllamada adicional en un archivo específico. En ese caso, agregue la acción, documente y envíe un parche a través de Trac . Si hay una buena razón para su parche (es decir, no es el único que lo usaría), entonces probablemente pueda agregarlo al núcleo.

A continuación, cree un complemento personalizado (¡no tiene que liberarlo / distribuirlo!) Que se vincule a este nuevo enlace y realice cualquier función que necesite que haga.

Refactorizar un archivo central

Otras veces, es posible que solo necesite un fragmento de código para comportarse de manera diferente. Pase una variable por referencia, por ejemplo, o devuelva un valor en lugar de repetirlo. Tómese un tiempo para sentarse y refactorizar el código para que haga lo que necesita que haga ... luego envíe un parche a través de Trac para que el resto de nosotros pueda beneficiarse de su trabajo.


¿Ves un tema en desarrollo aquí? Hackear el núcleo no es necesariamente un no-no ... es algo que la mayoría de los desarrolladores desalientan en gran medida a los nuevos usuarios o programadores novatos (si nos pregunta cómo hacer algo, le sugeriremos un complemento cada vez incluso antes) considerando sugerir que hackear el núcleo).

Hackear es la forma en que WordPress se desarrolla y evoluciona, pero es peligroso para alguien que solo está aprendiendo PHP o sin experiencia trabajando con archivos WP. Comience con un complemento antes de tocar el núcleo: si rompe un complemento, puede desinstalarlo rápidamente (eliminándolo a través de FTP si es necesario) ... pero si rompe el núcleo, pueden ocurrir cosas malas en su sitio y potencialmente en su base de datos también.

Pero si se encuentra en una situación en la que un hack de núcleo es inevitable, realice el cambio. Además, publique su cambio en una ubicación destacada (si su blog es muy visible, eso podría ser suficiente ... pero le sugiero a Trac porque así es como los cambios de la comunidad se llevan a la próxima versión). Su cambio podría ser la bala mágica que podría solucionar problemas en cientos de sitios diferentes ... así que contribuya a la comunidad que lo ayudó a construir su sitio.

Si el cambio se confirma, entonces su pirateo se convierte en parte del núcleo y no tendrá que preocuparse por ello en el futuro. Si no es así, al menos tiene documentación detallada sobre cómo volver a implementar el hack después de actualizar WP en 3 meses.


Redacción mucho mejor que la mía :)
hakre

3

No hackear el núcleo.

Bueno, eso es porque es una sugerencia para el primer nivel, usuarios sin experiencia. Esos piratas informáticos romperían su instalación, no pueden asegurarse de que sus cambios persistan en una actualización, etc.

Claro, hackear núcleo!

Seguro que puedes hackear el núcleo, por ejemplo, usando un sistema de gestión de versiones como SVN. Le ayuda a mantener sus propios cambios en el código central en línea con las actualizaciones del proyecto. También ayuda a crear parches para Wordpress y enviarlos al proyecto.

Hackear es de hecho hacer que Wordpress evolucione.

Consideraciones

Si no desea instalar un SVN completo y aún sabe qué (algunos) archivos ha cambiado, puede usar más herramientas de bajo nivel como Diff / Merge (para win: WinMerge ) o editores con capacidades de comparación (p. Ej. Notepad ++ con Comparar Plugin ). En Linux, puede instalar fácilmente utilidades de línea de comandos que hacen lo mismo. El editor Geany viene con una buena integración de shell por cierto. .

Prefiero Eclipse PDT para los trabajos difíciles. Pero eso no es para la edición rápida o pirateo.

Por lo tanto, diría que si está utilizando las herramientas adecuadas y desea tener cuidado, piratear el núcleo es el camino a seguir. Si está pirateando algo que queda en algún otro servidor de usuarios de Noob (sí, Wordpress es bastante popular), solo proporcione un complemento que se pueda eliminar fácilmente si rompe algo.


Hackear el núcleo NUNCA es una buena solución a largo plazo. NUNCA.
Fredy31

@ Fredy31; Es la única forma de mantener su instalación de WordPress actualizada, en funcionamiento y segura. Además, el "largo plazo" del que habla aquí es realmente largo si lleva dos años o más entre proporcionar un parche a Wordpress y luego ingresarlo. Incluso más para informar un problema sin parche. Cuídate.
Hakre

1
Obviamente, hackear el núcleo es problemático, pero encuentro sorprendente la resistencia y el vitriolo. En casi todas las demás áreas de software libre, se fomenta activamente la bifurcación. ¿Por qué personalizar WordPress es tan anatema? He visto innumerables otros proyectos que hacen exactamente lo que se sugiere mediante el uso de un RCS para crear una versión modificada de un programa mientras se mantiene actualizado con el enlace troncal. +1 por dar la advertencia obvia pero decir la verdad de que sí es posible y dar la sugerencia obvia de cómo se puede hacer con la menor cantidad de dificultad.
Synetech

Ah, y acabo de recordar que los temas infantiles hacen exactamente esto! Cuando crea un tema secundario, esencialmente está bifurcando el elemento primario y cada vez que se actualiza el elemento primario, debe copiar manualmente cualquier cambio en el elemento secundario. Por lo tanto, este odio a modificar el núcleo es inconsistente con otro comportamiento idéntico de WordPress que aceptó.
Synetech

2

Los problemas son:

  1. Cada vez que realice una actualización del núcleo (por ejemplo, debido a una corrección de seguridad, etc.), tendrá que actualizarlo manualmente, en lugar de ejecutar el actualizador automático.
    Si deseas hacer esto, hazte la vida más fácil:
    • marque cada cambio con un marcador común (.eg // PATCH STARTy // PATCH END)
    • use una herramienta como WinMerge para comparar la fuente existente con la nueva fuente y copie los cambios cuando sea necesario.
    • tendrá que tener cuidado en caso de que haya cambiado el área de código que está copiando y realizar los cambios apropiados en sus parches
    • tenga en cuenta que este es un trabajo 'interminable', que requiere tiempo facturable, a menos que pueda refacturarlo a su cliente.
  2. Puede causar problemas de incompatibilidad con complementos que esperan que el núcleo funcione de cierta manera; esto requerirá pruebas adicionales

A veces esto es 100% inevitable, pero casi siempre puedo encontrar otra forma de lograr cosas, o alterar las especificaciones debido al costo probable del tiempo dedicado a hacer esto. Es solo una pesadilla de mantenimiento, y muchas personas optan por hackear el núcleo, en lugar de buscar la solución adecuada.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.