Модифікація основних файлів WordPress


21

Чому?

Іноді легким виправленням зміни поведінки самого WordPress або плагіна може бути зміна файлів додатка або WordPress безпосередньо. Коли приходить така ідея, звичайна відповідь:

Не зламайте ядро.

Чому взагалі погана ідея змінювати основні файли?

Подумайте?

Однак іноді речі, які можуть бути критичними для сайту, просто неможливо зробити, приємно, не змінюючи основні файли. Коли ви перебуваєте в такій ситуації, що вам потрібно знати, перш ніж продовжувати і починати злом ядра?

Як?

Ви розглянули всі варіанти, але єдиним рішенням є злом основних файлів. Як вам слід робити це? Як впливатиме змінене ядро ​​на робочі процеси, як-от оновлення?


1
Я категорично не згоден з будь-якими рекомендаціями щодо взлому ядра, оскільки я ще не знайшов жодної речі, над якою не міг би обійтись. Єдині люди, у яких є якісь бізнес-злому для виробничого сайту, - це ті, хто абсолютно не потребує нічого читати на цю тему, оскільки вони, напевно, вже є в основній команді WordPress. Пояснення людям, як це зробити, просто дає 99 зі 100 людей, які, безумовно, не повинні робити це способом раціоналізувати свої рішення. І я дуже ненавиджу, щоб це було тут увімкнено. JMTCW.
MikeSchinkel

Ось подальший приклад, ось приклад запитання, на яке вперше були відповіді "Це неможливо", і я відповів прикладом, який показує, як: wordpress.stackexchange.com/questions/972/#984 Існує (майже завжди) спосіб зробити це без злому ядра.
MikeSchinkel

2
Якщо ви зміните ядро, вам доведеться повторно вносити зміни після кожного оновлення, і ви зробите встановлення нестандартним, тому людям важче допомогти вам. Просто створіть плагін, віджет, шаблон, гачок або будь-який із багатьох методів, за допомогою яких wordpress не потребує зміни ядра.
Wadih M.

Вадіх правильний. Я вніс зміни до деяких основних файлів, щоб виправити / покращити / налаштувати різні речі, і мені завжди було неприємно під час оновлення, оскільки мені потрібно перевірити зміни та застосувати свої патчі до нових файлів. Це ще більше засмучує, коли нові файли занадто відрізняються від старих і місця зміни вже не очевидні (або взагалі відсутні).
Synetech

1
Це так, як я боявся; іноді, коли немає вдосконалених гачків (наприклад, зміни моїх сайтів), єдиними гачками, які працюють для хитрості буферизованого виводу, є, admin_body_classа admin_footerце означає захоплення всієї сторінки . Я просто спробував це, і є> 2 Мб вмісту, який потрібно шукати у відповідному розділі, потім розбирати та змінювати перед виведенням. Або я можу додати один рядок коду до правої частини my-sites.phpта використовувати різний інструмент, щоб застосувати виправлення після оновлень (припускаючи, що він взагалі був змінений). Справді важко скласти справу проти зміни ядра в таких сценаріях.
Synetech

Відповіді:


21

Якщо вам потрібно зламати ядро, розгляньте це так, щоб зробити його розширеним для інших.

Додайте гачок дій

Дев'ять разів з десяти ви могли робити те, що хочете, якби тільки був додатковий do_actionвиклик у певному файлі. У цьому випадку додайте дію, задокументуйте її та надішліть патч через Trac . Якщо для вашої патчі є вагома причина (тобто ви не єдиний, хто коли-небудь використовував би її), то, ймовірно, ви можете отримати її до ядра.

Далі створіть спеціальний плагін (не потрібно його випускати / розповсюджувати!), Який зв’язується з цим новим гаком і виконує будь-яку функцію, яка вам потрібна.

Рефактор основного файлу

В іншому випадку вам може знадобитися лише фрагмент коду, щоб поводитись інакше. Наприклад, передайте змінну за посиланням або поверніть значення, а не повторюйте його. Знайдіть трохи часу, щоб сісти та перефактурувати код, щоб він зробив те, що вам потрібно зробити ... потім подайте патч через Trac, щоб решта з нас могли скористатися вашою роботою.


Ви бачите тему, що розвивається тут? Злом ядра не обов'язково є ні-ні ... просто щось, що зробить більшість розробників сильно перешкоджати новим користувачам або початківцям програмістам (якщо ви запитуєте нас, як щось робити, ми пропонуємо плагін кожен раз, перш ніж навіть розглядаючи можливість запропонувати вам зламати ядро).

Ядро хакерства - це те, як WordPress розвивається та розвивається, але це небезпечно для того, щоб хтось просто вивчав PHP або не мав досвіду роботи з файлами WP. Почніть з плагіна, перш ніж торкатися ядра - якщо ви зламаєте плагін, ви можете його швидко видалити (при необхідності видалити через FTP) ... але якщо ви зламаєте сервер, на вашому веб-сайті та потенційно на вашому сайті можуть трапитися погані речі. також база даних.

Але якщо ви потрапили в ситуацію, коли зламування неминуче, тоді зробіть зміни. Крім того, опублікуйте зміни на видному місці (якщо ваш блог добре видно, це може бути достатньо ... але я пропоную Trac, оскільки саме так зміни в спільноті перетягуються на наступний випуск). Вашою зміною може стати чарівна куля, яка могла б вирішити проблеми на ста різних сайтах ... тому сприяйте спільноті, яка допомогла вам створити свій сайт.

Якщо зміна буде здійснена, то ваш хак стане частиною основних, і вам не доведеться турбуватися про це в майбутньому. Якщо цього немає, принаймні у вас є детальна документація про те, як повторно реалізувати злом після оновлення WP за 3 місяці.


Набагато краще формулювання, ніж моє :)
hakre

3

Не зламайте ядро.

Ну це тому, що це пропозиція для першого рівня, недосвідчених користувачів. Ті, хто зламав ядро, зламали б їх установку, вони не можуть гарантувати, що їх зміни триватимуть оновлення тощо.

Звичайно, зламайте ядро!

Звичайно, ви можете дійсно зламати ядро, наприклад, використовуючи систему управління версіями, наприклад SVN. Це допомагає вам тримати власні зміни основного коду у відповідності з оновленнями проекту. Це також допомагає створити патчі для Wordpress та відправити їх у проект.

Злом ядра полягає в тому, що Wordpress розвивається.

Міркування

Якщо ви не хочете встановлювати повний SVN, і ви все ще знаєте, які (деякі) файли ви змінили, ви можете використовувати такі інструменти низького рівня, як Diff / Merge (для win: WinMerge ) або редактори з можливостями порівняння (наприклад, Блокнот ++ із плагіном порівняння ). На Linux ви можете легко встановити утиліти командного рядка, які роблять те саме. TheРедактор Geany поставляється з хорошою інтеграцією оболонки ДО РЕЧІ. .

Я віддаю перевагу Eclipse PDT для важких робіт. Але це не для швидкого редагування чи злому.

Тож я б сказав, якщо ви користуєтеся правильними інструментами і хочете подбати про злому ядра - це шлях. Якщо ви хакуєте щось разом, що залишилося на якомусь іншому сервері користувачів Noob (так, Wordpress досить популярний), просто надайте плагін, який можна легко викинути, якщо щось зламає.


Злом ядра НІКОЛИ не є хорошим рішенням у довгостроковій перспективі. НІКОЛИ.
Fredy31

@ Fredy31; Це єдиний спосіб підтримувати установку Wordpress оновленою, роботою та безпекою. Крім того, "довгий пробіг", про який ви говорите тут, дійсно довгий, якщо потрібно тривати два роки і довше між наданням патчу Wordpress і його введенням. Ще довше для повідомлення про проблему без патчу. Піклуватися.
хакре

1
Очевидно, що злом ядра є клопітким, але я вважаю, що опір і бадьорість для нього тут дивують. У майже всій іншій області FOSS розгортання активно заохочується. Чому налаштування WordPress є такою анафемою? Я бачив незліченну кількість інших проектів саме так, як запропоновано hakre, використовуючи RCS для створення модифікованої версії програми, в той час як слідкуйте за магістраллю. +1 за надання очевидного попередження, але правду про те, що це дійсно можливо, та надання очевидних пропозицій щодо того, як це можна зробити з найменшими труднощами.
Synetech

О, і я просто згадав, що дитячі теми роблять саме це! Коли ви створюєте дочірню тему, ви, по суті, розгортаєте батьків, і кожного разу, коли оновлення оновлюється, вам доведеться копіювати будь-які зміни вручну. Тож ця ненависть до зміни ядра суперечить іншій, ідентичній поведінці WordPress, яка прийнята.
Synetech

2

Питання:

  1. Щоразу, коли ви робите оновлення ядра (наприклад, через виправлення безпеки тощо), вам доведеться оновлювати його вручну, замість запуску автоматичного оновлення.
    Якщо ви хочете це зробити, то полегшите собі життя:
    • позначте кожну зміну загальним маркером (.eg // PATCH STARTта // PATCH END)
    • використовуйте такий інструмент, як WinMerge, щоб порівняти існуюче джерело з новим джерелом та скопіювати всі зміни, де це необхідно.
    • вам доведеться стежити, якщо область коду, який ви копіюєте, змінилася, і внести відповідні зміни до своїх патчів
    • майте на увазі, що це нескінченна робота, яка займає платний час, якщо тільки ви не зможете заново оплатити свого клієнта.
  2. Ви можете викликати проблеми несумісності із плагінами, які очікують, що ядро ​​функціонує певним чином - це потребує додаткового тестування

Іноді це на 100% неминуче, але я майже завжди можу придумати інший спосіб досягнення речей або змінити специфікацію через ймовірні витрати часу, витраченого на це. Це просто кошмар технічного обслуговування, і багато людей намагаються зламати ядро, а не шукати належного рішення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.