Ändern von WordPress-Kerndateien

21

Warum?

Manchmal kann eine einfache Lösung zum Ändern des Verhaltens von WordPress selbst oder eines Plugins darin bestehen, die Dateien des Plugins oder von WordPress direkt zu ändern. Wenn Sie auf eine solche Idee kommen, lautet die übliche Antwort:

Hacke nicht den Kern.

Warum ist es im Allgemeinen eine schlechte Idee, Kerndateien zu ändern?

Erwägen?

Manchmal ist es jedoch einfach unmöglich, Dinge zu tun, die für eine Site kritisch sein können, ohne die Kerndateien zu ändern. Was müssen Sie in einer solchen Situation beachten, bevor Sie mit dem Hacken von Core beginnen?

Wie?

Sie haben alle Optionen in Betracht gezogen, aber die einzige Lösung ist das Hacken von Kerndateien. Wie solltest du das machen? Wie wird ein veränderter Kern die Arbeitsabläufe beeinflussen, wie z. B. das Aktualisieren?

googletorp
quelle
1
Ich bin mit Empfehlungen zum Hacken des Kerns überhaupt nicht einverstanden, da ich noch keine einzige Sache gefunden habe, die ich nicht umgehen konnte. Die einzigen Leute, die einen Business-Hacking-Kern für eine Produktionsstätte haben, sind diejenigen, die absolut nichts zu diesem Thema lesen müssen, da sie wahrscheinlich bereits im WordPress-Kernteam sind. Den Leuten zu erklären, wie es geht, gibt 99 von 100 Leuten, die es definitiv nicht tun sollten, eine Möglichkeit, ihre Entscheidungen zu rationalisieren. Und ich würde es wirklich hassen, wenn das hier möglich wäre. JMTCW.
MikeSchinkel
Nachfolgend finden Sie ein Beispiel für eine Frage, bei der das erste Mal die Antwort "Es ist nicht möglich" gegeben wurde, und ich antwortete mit einem Beispiel, das zeigt, wie: wordpress.stackexchange.com/questions/972/#984 Es gibt (fast immer) einen Weg zu Mach es ohne Hacking Core.
MikeSchinkel
2
Wenn Sie den Core ändern, müssen Sie die Änderungen nach jedem Upgrade erneut durchführen. Die Installation wird dann vom Standard abweichen, sodass es für die Benutzer schwieriger ist, Ihnen zu helfen. Erstellen Sie einfach ein Plugin, ein Widget, eine Vorlage, einen Hook oder eine der vielen Methoden, die Ihnen WordPress bietet, damit Sie den Core nicht ändern müssen.
Wadih M.
Wadih ist richtig. Ich habe Änderungen an einigen der Kerndateien vorgenommen, um verschiedene Dinge zu korrigieren / verbessern / anzupassen, und ich war beim Upgrade immer frustriert, weil ich nach Änderungen suchen und meine Patches auf die neuen Dateien anwenden musste. Dies ist umso frustrierender, wenn die neuen Dateien sich zu stark von den alten unterscheiden und die Speicherorte der Änderungen nicht mehr offensichtlich (oder gar nicht mehr vorhanden) sind.
Synetech
1
Es ist, wie ich befürchtet habe; Manchmal, wenn es keine verfeinerten Hooks gibt (z. B. das Ändern von Meine Websites), sind die einzigen Hooks, die für den Trick der gepufferten Ausgabe funktionieren, admin_body_classund admin_footerdas bedeutet, dass die gesamte Seite erfasst wird . Ich habe es gerade ausprobiert und es gibt> 2 MB Inhalt, der nach dem relevanten Abschnitt durchsucht, dann analysiert und vor der Ausgabe geändert werden muss. Oder ich kann eine Codezeile in den rechten Teil von einfügen my-sites.phpund ein Diff-Tool verwenden, um den Patch nach dem Update anzuwenden (vorausgesetzt, er wurde überhaupt geändert). In solchen Szenarien ist es wirklich schwierig, eine Änderung des Kerns abzulehnen.
Synetech

Antworten:

21

Wenn Sie Core hacken müssen , erwägen Sie, dies auf eine Weise zu tun, die es für andere erweiterbar macht.

Fügen Sie einen Aktions-Hook hinzu

In neun von zehn Fällen könnten Sie tun, was Sie wollten, wenn do_actionin einer bestimmten Datei nur ein zusätzlicher Anruf vorhanden wäre. Fügen Sie in diesem Fall die Aktion hinzu, dokumentieren Sie sie und senden Sie einen Patch über Trac . Wenn es einen guten Grund für Ihren Patch gibt (dh Sie sind nicht der einzige, der ihn jemals verwenden würde), können Sie ihn wahrscheinlich zum Core hinzufügen.

Erstellen Sie als Nächstes ein benutzerdefiniertes Plug-In (Sie müssen es nicht freigeben / verteilen!), Das mit diesem neuen Hook verknüpft ist und die Funktionen ausführt, die Sie benötigen.

Refactor einer Core-Datei

In anderen Fällen benötigen Sie möglicherweise nur einen Code, um sich anders zu verhalten. Übergeben Sie beispielsweise eine Variable als Referenz, oder geben Sie einen Wert zurück, anstatt ihn zurückzugeben. Nehmen Sie sich etwas Zeit, setzen Sie sich und überarbeiten Sie den Code, damit er das tut, was Sie tun müssen. Senden Sie dann einen Patch über Trac, damit der Rest von uns von Ihrer Arbeit profitieren kann.


Sehen Sie hier ein Thema? Hacking Core ist nicht unbedingt ein No-No. Nur etwas, von dem die meisten Entwickler neue Benutzer oder Programmieranfänger dringend abraten (wenn Sie uns fragen, wie etwas zu tun ist, schlagen wir jedes Mal vor, ein Plug-In zu installieren in Erwägung zu ziehen, Ihnen einen Hack-Core vorzuschlagen).

Der Hacking-Kern ist die Art und Weise, wie WordPress entwickelt und weiterentwickelt wird, aber es ist gefährlich für jemanden, der nur PHP lernt oder keine Erfahrung mit WP-Dateien hat. Beginnen Sie mit einem Plug-In, bevor Sie Core berühren. Wenn Sie ein Plug-In beschädigen, können Sie es schnell deinstallieren (ggf. per FTP entfernen) Datenbank als auch.

Wenn Sie sich jedoch in einer Situation befinden, in der ein Core-Hack unvermeidbar ist, nehmen Sie die Änderung vor. Veröffentlichen Sie Ihre Änderung auch an einer prominenten Stelle (wenn Ihr Blog gut sichtbar ist, ist dies möglicherweise ausreichend ... Ich empfehle Trac, da auf diese Weise Community-Änderungen in die nächste Version übernommen werden). Ihre Änderung könnte die magische Kugel sein, die Probleme an hundert verschiedenen Standorten beheben könnte. Tragen Sie also zur Community bei, die Sie beim Aufbau Ihrer Website unterstützt hat.

Wenn die Änderung festgeschrieben wird, wird Ihr Hack Teil des Kerns und Sie müssen sich in Zukunft keine Gedanken mehr darüber machen. Ist dies nicht der Fall, verfügen Sie zumindest über eine detaillierte Dokumentation zur erneuten Implementierung des Hacks nach dem Upgrade von WP in 3 Monaten.

EAMann
quelle
Viel besserer Wortlaut als meiner :)
hakre
3

Hacke nicht den Kern.

Das liegt daran, dass es ein Vorschlag für unerfahrene Benutzer der ersten Ebene ist. Diejenigen, die den Kern hacken, würden ihre Installation unterbrechen, sie können nicht sicherstellen, dass ihre Änderungen ein Update usw. beibehalten.

Sicher, Hack Core!

Sicher, Sie können Core tatsächlich hacken, indem Sie beispielsweise ein Versionsverwaltungssystem wie SVN verwenden. Es hilft Ihnen dabei, Ihre eigenen Änderungen am Kerncode mit den Projektaktualisierungen in Einklang zu bringen. Es ist auch hilfreich, Patches für Wordpress zu erstellen und an das Projekt zu senden.

Der Hacking-Kern sorgt dafür, dass sich Wordpress weiterentwickelt.

Überlegungen

Wenn Sie keinen vollständigen SVN installieren möchten und dennoch wissen, welche (einige) Dateien Sie geändert haben, können Sie einfachere Tools wie Diff / Merge (für win: WinMerge ) oder Editoren mit Vergleichsfunktionen (z. B. Notepad ++ mit Compare Plugin ). Unter Linux können Sie problemlos Befehlszeilenprogramme installieren, die dasselbe tun. Der Geany-Editor kommt übrigens mit einer schönen Shell-Integration. .

Ich bevorzuge Eclipse PDT für die harten Jobs. Aber das ist nicht für das schnelle Bearbeiten oder Hacken.

Also würde ich sagen, wenn Sie die richtigen Tools verwenden und darauf achten möchten, dass der Kern gehackt wird, ist der richtige Weg. Wenn Sie etwas zusammen hacken, das auf einem anderen Noob-Benutzerserver übrig geblieben ist (Wordpress ist ziemlich beliebt), stellen Sie einfach ein Plugin zur Verfügung, das einfach gelöscht werden kann, wenn etwas kaputt geht.

hakre
quelle
Hacking Core ist auf lange Sicht NIE eine gute Lösung. NOCH NIE.
Fredy31
@ Fredy31; Nur so bleibt Ihre WordPress-Installation auf dem neuesten Stand, funktioniert und ist sicher. Auch die "Langfristigkeit", von der Sie hier sprechen, ist sehr lang, wenn es zwei Jahre und länger dauert, bis ein Patch für Wordpress bereitgestellt und dann veröffentlicht wird. Noch länger, wenn ein Problem ohne Patch gemeldet wird. Pass auf.
Hakre
1
Offensichtlich ist das Hacken des Kerns problematisch, aber ich finde den Widerstand und das Vitriol hier überraschend. In fast allen anderen Bereichen von FOSS wird das Gabeln aktiv gefördert. Warum ist das Anpassen von WordPress so verblüffend? Ich habe unzählige andere Projekte gesehen, die genau so viel Arbeit geleistet haben, wie sie mit einem RCS vorgeschlagen wurden, um eine modifizierte Version eines Programms zu erstellen und dabei auf dem neuesten Stand zu bleiben. +1 für das Geben der offensichtlichen Warnung, aber das Sagen der Wahrheit, dass es tatsächlich möglich ist, und den offensichtlichen Vorschlag, wie es mit dem geringsten Schwierigkeitsgrad getan werden kann.
Synetech
Oh, und ich habe mich gerade daran erinnert, dass Kinderthemen genau das tun! Wenn Sie ein untergeordnetes Thema erstellen, geben Sie dem übergeordneten Thema im Wesentlichen eine Zunge und müssen bei jeder Aktualisierung des übergeordneten Themas alle Änderungen manuell auf das untergeordnete Thema kopieren. Dieser Hass, den Kern zu modifizieren, widerspricht also einem anderen, identischen WordPress-Verhalten, das akzeptiert wurde.
Synetech
2

Die Probleme sind:

  1. Jedes Mal, wenn Sie ein Update des Cores durchführen (z. B. aufgrund eines Sicherheitspatches usw.), müssen Sie es manuell aktualisieren, anstatt den automatischen Updater auszuführen.
    Wenn Sie dies tun möchten, machen Sie es sich leichter:
    • markiere jede Änderung mit einem gemeinsamen Marker (.eg // PATCH STARTund // PATCH END)
    • Verwenden Sie ein Tool wie WinMerge, um die vorhandene Quelle mit der neuen Quelle zu vergleichen und bei Bedarf Änderungen zu kopieren.
    • Sie müssen aufpassen, ob sich der Codebereich, den Sie kopieren, geändert hat, und die entsprechenden Änderungen an Ihren Patches vornehmen
    • Beachten Sie, dass dies ein Job ohne Ende ist, der viel Zeit in Anspruch nimmt, es sei denn, Sie können Ihren Kunden eine Rechnung dafür stellen.
  2. Sie können Inkompatibilitätsprobleme mit Plugins verursachen, bei denen erwartet wird, dass der Core auf eine bestimmte Weise funktioniert. Dies erfordert zusätzliche Tests

Manchmal ist dies zu 100% unvermeidlich, aber ich kann mir fast immer einen anderen Weg einfallen lassen, um Dinge zu erreichen oder die Spezifikationen zu ändern, da dies wahrscheinlich zu lange dauert. Es ist nur ein Wartungs-Albtraum, und viele Leute entscheiden sich für das Hacken des Kerns, anstatt nach der richtigen Lösung zu suchen.

Dan Smart
quelle