Modyfikacja podstawowych plików WordPress

21

Czemu?

Czasami łatwym rozwiązaniem zmiany zachowania samego WordPressa lub wtyczki może być bezpośrednia zmiana plików wtyczki lub WordPressa. Kiedy pojawia się taki pomysł, zwykle odpowiada:

Nie rąbaj rdzenia.

Dlaczego zmiana podstawowych plików jest na ogół złym pomysłem?

Rozważać?

Czasami jednak rzeczy, które mogą mieć krytyczne znaczenie dla witryny, są po prostu niemożliwe do zrobienia, w przyjemny sposób bez zmiany podstawowych plików. W takiej sytuacji, o czym musisz wiedzieć, zanim zaczniesz hakować rdzeń?

W jaki sposób?

Rozważyłeś wszystkie opcje, ale jedynym rozwiązaniem jest włamanie się do podstawowych plików. Jak powinieneś to zrobić? W jaki sposób zmieniony rdzeń wpłynie na przepływy pracy, takie jak aktualizacja?

googletorp
źródło
1
Zdecydowanie nie zgadzam się z żadnymi zaleceniami dotyczącymi zhakowania rdzenia, ponieważ nie znalazłem jeszcze jednej rzeczy, nad którą nie mogę się obejść. Jedynymi osobami, które mają jakikolwiek biznesowy rdzeń hakerski do strony produkcyjnej, są ci, którzy absolutnie nie muszą czytać niczego na ten temat, ponieważ prawdopodobnie są już w głównym zespole WordPress. Wyjaśnienie ludziom, jak to zrobić, po prostu daje 99 na 100 osób, które zdecydowanie nie powinny robić tego, aby zracjonalizować swoje decyzje. I naprawdę nie chciałbym widzieć włączania tego tutaj. JMTCW.
MikeSchinkel,
Jako kontynuację, oto przykład pytania, które brzmiało: „To niemożliwe”, a ja odpowiedziałem przykładem pokazującym, jak: wordpress.stackexchange.com/questions/972/#984 (prawie zawsze) jest sposób zrób to bez rdzenia hakującego.
MikeSchinkel,
2
Jeśli zmienisz rdzeń, będziesz musiał ponownie wprowadzić zmiany po każdym uaktualnieniu i sprawisz, że instalacja będzie niestandardowa, więc ludziom trudniej będzie ci pomóc. Wystarczy utworzyć wtyczkę, widget, szablon, hak lub dowolną z wielu metod Wordpress, dzięki którym nie musisz zmieniać rdzenia.
Wadih M.,
Wadih ma rację. Wprowadziłem zmiany w niektórych podstawowych plikach, aby naprawić / ulepszyć / dostosować różne rzeczy i zawsze byłem sfrustrowany podczas aktualizacji, ponieważ muszę sprawdzać zmiany i stosować łaty do nowych plików. Jest to tym bardziej frustrujące, gdy nowe pliki są zbyt odmienne od starych, a lokalizacje zmian nie są już oczywiste (ani nawet w ogóle obecne).
Synetech,
1
Tak jak się obawiałem; czasami, gdy nie ma wyrafinowanych haków (takich jak modyfikowanie Moich stron), jedynymi hakami, które działają dla sztuczki buforowanej, są admin_body_classi admin_footerco oznacza przechwycenie całej strony . Właśnie próbowałem i jest> 2 MB treści, które należy wyszukać w odpowiedniej sekcji, a następnie przeanalizować i zmodyfikować przed wydrukowaniem. Lub mogę dodać jeden wiersz kodu do prawej części my-sites.phpi użyć narzędzia różnicowego, aby zastosować łatkę po aktualizacji (zakładając, że w ogóle została zmodyfikowana). Naprawdę trudno jest uzasadnić modyfikację rdzenia w takich scenariuszach.
Synetech

Odpowiedzi:

21

Jeśli musisz zhakować rdzeń, zastanów się nad tym w sposób umożliwiający jego rozszerzenie na innych.

Dodaj zaczep akcji

Dziewięć razy na dziesięć możesz zrobić to, co chcesz, jeśli tylko do_actionw określonym pliku znajduje się dodatkowe wywołanie. W takim przypadku dodaj akcję, udokumentuj ją i prześlij łatę przez Trac . Jeśli istnieje dobry powód dla twojej łatki (tj. Nie jesteś jedynym, który kiedykolwiek z niej skorzystałby), prawdopodobnie możesz ją dodać do rdzenia.

Następnie zbuduj niestandardową wtyczkę (nie musisz jej zwalniać / rozpowszechniać!), Która łączy się z tym nowym hakiem i wykonuje dowolną funkcję, którą potrzebujesz.

Refaktoryzacja pliku podstawowego

Innym razem możesz potrzebować fragmentu kodu, aby zachowywać się inaczej. Przekaż zmienną na przykład przez odwołanie lub zwróć wartość, a nie ją wyświetlaj. Poświęć trochę czasu, aby usiąść i zmienić kod, aby zrobił to, czego potrzebujesz ... a następnie prześlij łatkę za pośrednictwem Traca, aby reszta z nas mogła skorzystać z Twojej pracy.


Czy widzisz tutaj motyw rozwijający się? Hakowanie rdzenia niekoniecznie jest nie-nie ... po prostu coś, co większość programistów odradza nowym użytkownikom lub początkującym programistom (jeśli pytasz nas, jak coś zrobić, za każdym razem sugerujemy wtyczkę rozważając zasugerowanie hakowania rdzenia).

Rdzeń hakerski to sposób, w jaki WordPress rozwija się i ewoluuje, ale jest niebezpieczny dla kogoś, kto dopiero uczy się PHP lub nie ma doświadczenia w pracy z plikami WP. Przed dotknięciem rdzenia zacznij od wtyczki - jeśli złamiesz wtyczkę, możesz ją szybko odinstalować (w razie potrzeby usunąć przez FTP) ... ale jeśli złamiesz rdzeń, na twojej stronie i potencjalnie na twojej stronie mogą wystąpić złe rzeczy baza danych.

Ale jeśli znajdujesz się w sytuacji, gdy hack rdzeniowy jest nieunikniony, dokonaj zmiany. Opublikuj również swoją zmianę w widocznym miejscu (jeśli twój blog jest bardzo widoczny, może to wystarczyć ... ale sugeruję Tracowi, ponieważ w ten sposób zmiany społeczności są wprowadzane do następnej wersji). Twoja zmiana może być magiczną kulą, która może rozwiązać problemy w setkach różnych witryn ... więc wróć do społeczności, która pomogła Ci zbudować witrynę.

Jeśli zmiana zostanie zatwierdzona, twój hack stanie się częścią rdzenia i nie będziesz musiał się tym martwić w przyszłości. Jeśli tak się nie stanie, przynajmniej masz szczegółową dokumentację na temat tego, jak ponownie wdrożyć hack po aktualizacji WP w ciągu 3 miesięcy.

EAMann
źródło
Znacznie lepsze sformułowanie niż moje :)
hakre
3

Nie rąbaj rdzenia.

To dlatego, że jest to sugestia dla niedoświadczonych użytkowników pierwszego poziomu. Te hakujące jądro zepsują ich instalację, nie mogą zapewnić, że ich zmiany utrzymają aktualizację itp.

Jasne, zhakuj rdzeń!

Na pewno możesz włamać się do rdzenia, na przykład za pomocą systemu zarządzania wersjami, takiego jak SVN. Pomaga utrzymać własne zmiany w podstawowym kodzie zgodnie z aktualizacjami projektu. Pomaga również tworzyć łatki dla Wordpress i wysyłać je do projektu.

Rdzeń hakerski jest niezmienny, dzięki czemu Wordpress ewoluuje.

Uwagi

Jeśli nie chcesz instalować pełnej SVN i nadal wiesz, które (niektóre) pliki zmieniłeś, możesz użyć większej liczby narzędzi niskiego poziomu, takich jak Diff / Merge (dla win: WinMerge ) lub edytorów o porównywalnych możliwościach (np. Notepad ++ with Compare Plugin ). W systemie Linux można łatwo zainstalować narzędzia wiersza polecenia, które robią to samo. Edytora Geany pochodzi z ładnym integracji powłoki btw. .

Wolę Eclipse PDT do trudnych zadań. Ale to nie jest do szybkiej edycji lub hackowania.

Powiedziałbym więc, że jeśli używasz odpowiednich narzędzi i chcesz zachować ostrożność, włamanie się do rdzenia jest dobrym rozwiązaniem. Jeśli hakujesz coś, co zostało na serwerze innych użytkowników Noob (tak, Wordpress jest dość popularny), po prostu zapewnij wtyczkę, którą można łatwo wyrzucić, jeśli coś zepsuje.

hakre
źródło
Rdzeń hakerski NIGDY nie jest dobrym rozwiązaniem na dłuższą metę. NIGDY.
Fredy31
@ Fredy31; Jest to jedyny sposób, aby Twoja instalacja Wordpress była aktualna, działająca i bezpieczna. Również „długa perspektywa” , o której tu mówisz, jest naprawdę długa, jeśli potrzeba dwóch lat i dłużej od dostarczenia łatki do Wordpressa, a następnie jej wprowadzenia. Jeszcze dłużej w przypadku zgłoszenia problemu bez łatki. Dbać.
hakre
1
Oczywiście hakowanie rdzenia jest kłopotliwe, ale wydaje mi się, że opór i witriol są zaskakujące. W prawie każdym innym obszarze FOSS aktywnie zachęca się do rozwidlania. Dlaczego dostosowywanie WordPressa jest tak anatemą? Widziałem, jak niezliczone inne projekty robią dokładnie tak, jak sugeruje hakre, używając RCS do stworzenia zmodyfikowanej wersji programu, zachowując jednocześnie aktualność tułowia. +1 za udzielenie oczywistego ostrzeżenia, ale za powiedzenie prawdy, że jest to rzeczywiście możliwe, oraz za wyraźną sugestię, jak można to zrobić przy najmniejszym stopniu trudności.
Synetech
Aha, i właśnie przypomniałem sobie, że motywy potomne właśnie to robią! Podczas tworzenia motywu podrzędnego zasadniczo rozwidlasz element nadrzędny i za każdym razem, gdy element nadrzędny jest aktualizowany, musisz ręcznie skopiować wszelkie zmiany do elementu podrzędnego. Tak więc nienawiść do modyfikowania rdzenia jest niezgodna z innym, identycznym zachowaniem WordPressa, które zostało zaakceptowane.
Synetech
2

Problemami są:

  1. Za każdym razem, gdy zrobisz aktualizację rdzenia (np. Z powodu poprawki bezpieczeństwa itp.), Będziesz musiał ją ręcznie zaktualizować, zamiast uruchamiać automatyczną aktualizację.
    Jeśli chcesz to zrobić, ułatw sobie życie:
    • zaznacz każdą zmianę wspólnym markerem (.eg // PATCH STARTi // PATCH END)
    • użyj narzędzia takiego jak WinMerge, aby porównać istniejące źródło z nowym źródłem i skopiuj zmiany tam, gdzie to konieczne.
    • będziesz musiał uważać na wypadek zmiany obszaru kodu, który kopiujesz, i wprowadzić odpowiednie zmiany w swoich łatach
    • pamiętaj, że jest to „niekończąca się” praca, zajmująca rozliczalny czas, chyba że możesz za to zapłacić klientowi.
  2. Możesz powodować problemy z niekompatybilnością wtyczek, które oczekują, że rdzeń będzie działał w określony sposób - będzie to wymagało dodatkowych testów

Czasami jest to w 100% nieuniknione, ale prawie zawsze mogę wymyślić inny sposób na osiągnięcie rzeczy lub zmianę specyfikacji ze względu na prawdopodobny koszt czasu spędzonego na tym. To tylko koszmar konserwacji, a wiele osób wybiera rdzeń hakerski, zamiast szukać odpowiedniego rozwiązania.

Dan Smart
źródło