Модификация файлов ядра WordPress

21

Зачем?

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

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

Почему вообще плохая идея менять основные файлы?

Рассмотреть возможность?

Однако иногда вещи, которые могут быть критически важными для сайта, просто невозможно сделать, хорошим способом без изменения основных файлов. В такой ситуации, что вам нужно знать, прежде чем начинать взламывать ядро?

Как?

Вы рассмотрели все варианты, но единственным решением является взлом основных файлов. Как вы должны делать это? Как измененное ядро ​​повлияет на рабочие процессы, такие как обновление?

googletorp
источник
1
Я категорически не согласен с любыми рекомендациями по взлому ядра, поскольку мне еще предстоит найти одну вещь, которую я не смог бы обойти. Единственные люди, которые имеют какое-либо ядро ​​для бизнес-взлома на рабочем сайте, - это те, кому совершенно не нужно читать что-либо по этой теме, поскольку они, вероятно, уже работают в основной команде WordPress. Объяснение людям, как это сделать, просто дает 99 из 100 человек, которые определенно не должны делать это, способ рационализировать свои решения. И я действительно не хотел бы видеть это включенным здесь. JMTCW.
MikeSchinkel
В качестве продолжения, вот пример вопроса, на который сначала были получены ответы «Это невозможно», и я ответил примером, показывающим, как: wordpress.stackexchange.com/questions/972/#984 Существует (почти всегда) способ сделать это без взлома ядра.
MikeSchinkel
2
Если вы меняете ядро, вам придется заново вносить изменения после каждого отдельного обновления, и вы сделаете вашу установку нестандартной, так что людям будет труднее помочь вам. Просто создайте плагин, виджет, шаблон, ловушку или любой из множества методов, которые WordPress позволяет вам не менять ядро.
Вади М.
Вади это правильно. Я внес изменения в некоторые из основных файлов, чтобы исправить / улучшить / настроить различные вещи, и я всегда был разочарован при обновлении, потому что я должен проверять изменения и применять свои патчи к новым файлам. Это еще более расстраивает, когда новые файлы слишком отличаются от старых, а расположение изменений больше не очевидно (или вообще не присутствует).
Synetech
1
Это как я боялся; иногда , когда там не рафинированные крючки (такие , как изменение My Sites), только не перехватывает , которые работают в буферном-выводе трюке являются admin_body_classи admin_footerчто означает захватив всю страницу . Я только что попробовал, и есть> 2 МБ контента, который должен быть найден для соответствующего раздела, затем проанализирован и изменен перед выводом. Или я могу добавить одну строку кода в правую часть my-sites.phpи использовать инструмент diff, чтобы применить исправление после обновлений (при условии, что оно вообще было изменено). В таких сценариях действительно сложно аргументировать против модификации ядра.
Synetech

Ответы:

21

Если вам необходимо взломать ядро, подумайте о том, чтобы сделать его таким, чтобы его можно было расширить для других.

Добавить Action Hook

В девяти случаях из десяти вы могли бы делать то, что хотели, если бы do_actionв конкретном файле был дополнительный вызов. В этом случае добавьте действие, задокументируйте его и отправьте патч через Trac . Если для вашего патча есть веская причина (то есть вы не единственный, кто его использует), вы можете добавить его в ядро.

Затем создайте пользовательский плагин (вам не нужно его выпускать / распространять!), Который подключается к этому новому хуку и выполняет все функции, которые вам нужны.

Рефакторинг файла ядра

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


Вы видите тему, развивающуюся здесь? Взломать ядро ​​не обязательно «нет-нет» ... просто то, что большинство разработчиков крайне обескуражит для новых пользователей или начинающих программистов (если вы спрашиваете нас, как сделать что-то, мы предложим плагин каждый раз, прежде чем даже рассматриваю, чтобы предложить вам взломать ядро).

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

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

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

EAMann
источник
Гораздо лучше формулировка, чем моя :)
хакре
3

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

Ну, это потому, что это предложение для первого уровня, неопытных пользователей. Те, кто взломал ядро, сломали бы их установку, они не могут гарантировать, что в их изменениях сохранятся обновления и т. Д.

Конечно, взломать ядро!

Конечно, вы можете взломать ядро, например, с помощью системы управления версиями, такой как SVN. Это поможет вам сохранить ваши собственные изменения в основном коде в соответствии с обновлениями проекта. Это также помогает создавать патчи для Wordpress и отправлять их в проект.

Взлом ядра - это факт, заставляющий Wordpress развиваться.

Соображения

Если вы не хотите устанавливать полный SVN и все еще знаете, какие (некоторые) файлы вы изменили, вы можете использовать более низкоуровневые инструменты, такие как Diff / Merge (для win: WinMerge ) или редакторы с возможностями сравнения (например, Блокнот ++ с плагином сравнения ). В Linux вы можете легко установить утилиты командной строки, которые делают то же самое. Редактор Geany поставляется с хорошей интеграцией оболочки КСТАТИ. ,

Я предпочитаю Eclipse PDT для тяжелых работ. Но это не для быстрого редактирования или взлома.

Так что я бы сказал, что если вы используете правильные инструменты и хотите позаботиться о том, чтобы взломать ядро ​​- это путь. Если вы взламываете что-то вместе, что осталось на каком-то другом сервере пользователей Noob (да, Wordpress довольно популярен), просто предоставьте плагин, который можно легко выбросить, если он что-то сломает.

hakre
источник
Взлом ядра никогда не будет хорошим решением в долгосрочной перспективе. НИКОГДА.
Fredy31
@ Fredy31; Это единственный способ поддерживать установку WordPress в актуальном состоянии, работать и быть безопасной. Кроме того, «длительный период», о котором вы здесь говорите, очень долгий, если между предоставлением патча для Wordpress и последующим его получением уходит два года и более. Еще больше времени для сообщения о проблеме без патча. Береги себя.
Хакре
1
Очевидно, что взломать ядро ​​проблематично, но я нахожу сопротивление и купорос к нему здесь удивительным. Практически во всех других областях FOSS разветвление активно поощряется. Почему настройка WordPress так анафема? Я видел бесчисленное множество других проектов, которые делают именно так, как предлагал Хакре, используя RCS для создания модифицированной версии программы, не отставая от ствола. +1 за очевидное предупреждение, но за правду о том, что это действительно возможно, и за очевидное предложение о том, как это можно сделать с наименьшими трудностями.
Synetech
О, и я только что вспомнил, что детские темы делают именно это! Когда вы создаете дочернюю тему, вы по сути разветвляете родителя, и всякий раз, когда родитель обновляется, вы должны вручную копировать любые изменения в дочернюю. Так что эта ненависть к модификации ядра несовместима с другим, идентичным принятым поведением WordPress.
Synetech
2

Вопросы:

  1. Каждый раз, когда вы выполняете обновление ядра (например, из-за исправления безопасности и т. Д.), Вам придется обновлять его вручную вместо запуска автоматического обновления.
    Если вы хотите сделать это, то сделайте жизнь проще для себя:
    • пометить каждое изменение общим маркером (.eg // PATCH STARTи // PATCH END)
    • используйте такой инструмент, как WinMerge, чтобы сравнить существующий источник с новым источником и скопировать изменения, где это необходимо.
    • вам придется остерегаться, если область кода, которую вы копируете, изменилась, и внести соответствующие изменения в ваши патчи
    • имейте в виду, что это «бесконечная» работа, занимающая оплачиваемое время, если только вы не можете за это повторно закачивать своего клиента.
  2. Вы можете вызвать проблемы несовместимости с плагинами, которые ожидают, что ядро ​​будет функционировать определенным образом - это потребует дополнительного тестирования

Иногда это на 100% неизбежно, но я почти всегда могу придумать другой способ достижения цели или изменения спецификации из-за вероятной стоимости времени, потраченного на это. Это просто кошмар обслуживания, и многие люди предпочитают взламывать ядро, а не искать правильное решение.

Дэн Смарт
источник