Часто быстрое решение проблемы можно решить, взломав ядро WordPress, то есть изменив код, который является самим WordPress.
Это очень опасный путь! Не делай этого, никогда!
Вы всегда можете изменить работу WordPress с помощью плагинов. Иногда это может быть довольно утомительно и сложно, но дополнительная работа всегда перевешивает проблемы, которые возникают при изменении самого ядра WordPress.
Кто-то скажет, что могут быть ситуации, когда взлом ядра — единственное решение, но если вы здесь задаёте вопросы, то вы точно не в такой ситуации.
Этот вопрос предназначен для введения в коллективную работу о том, почему вам никогда не следует взламывать ядро WordPress, и мы можем использовать его в качестве справочного материала. Если у вас есть что добавить, не стесняйтесь добавить это как вопрос.
@googletorp : Ты молодец, чувак!
Я не согласен с тем, что никогда не следует этого делать, в исходном вопросе есть несколько ответов, которые указывают на причины, поэтому я даю этому вопросу отрицательный голос. Кроме того, я также не согласен с тем, что если вы здесь задаете вопросы, то вы определенно не в такой ситуации. Это также сайт для экспертов, поэтому вопросы о взломе ядра не должны подвергаться цензуре. Но, возможно, нам следует обсудить это дальше на мета-сайте.
@ Джереми Кларк — Хорошо!
Насколько я знаю, это была первоначальная причина, не техническая (вы можете организовать это таким образом, чтобы не создавать проблем для редактирования вашей установки), а из-за того, что пользователи жаловались на форумах поддержки WordPress, что обновление действительно сломало их сайт. Поскольку обновление часто уже создавало проблемы само по себе, некоторые пользователи хотели убедиться, что, по крайней мере, количество проблем, «самостоятельно созданных пользователем», невелико и исключено из уравнения.
Изображение является культурной ссылкой на: Каждый раз, когда вы мастурбируете… Бог убивает котенка.
Я бы сказал, что причина номер один для взлома файлов ядра состоит в том, чтобы заставить их работать так, как они нужны мне, а не так, как другие думают, что они мне могут понадобиться. Это может быть временно (как в вашем примере отладки), но это может быть также для полной версии или даже для основных версий из-за проблем, которые не исправляются в исходном пакете wordpress (будь то это wordpress.org или предварительно упакованный кем-то еще).
Лучшая причина не взламывать ядро состоит в том, что все, что вы делаете, должно быть переработано как патч для ядра!
Очевидно, что ВЕСЬ ваш код вообще не будет хорошим патчем, или, по крайней мере, будет редко. Вместо этого вам нужно выяснить, какой хук (действие или фильтр) отсутствует в ядре, что позволит вам делать все, что вам нужно, без взлома ядра. Нам не нужно взламывать ядро, когда есть адекватные фильтры/действия, поэтому обнаружение отсутствующего хука всегда устраняет необходимость взламывать ядро.
Это часто может потребовать сложного решения проблем и сложной беготни, но чаще всего происходит не то, что вы обнаруживаете, что уже есть крючок для решения вашей проблемы, поэтому вам не нужно взламывать ядро!
В редких случаях, когда хука действительно нет, вам просто нужно опубликовать в trac объяснение, почему ваш хук должен существовать. Если вы зафиксируете свой новый хук, у вас будет временный 1-строчный хак для ядра, о котором не нужно будет беспокоиться при следующем обновлении.
Даже если у вас не получается что-то сделать в Core trac (требуется некоторое убеждение, чтобы что-то было зафиксировано), вы, по крайней мере, уварили свой основной хак до минимума: 1 строка кода для вашего действия/фильтра. Когда вы обновляете WP, вы заменяете весь код, который вы впихнули в ядро, одной строкой, которую нужно обновить, и ваш плагин может остаться прежним!
Также стоит отметить тот факт, что как только вы обновите WordPress до последней версии, все ваши изменения в основных файлах будут перезаписаны.
Я считаю, что это, прямо из WordPress Codex, говорит само за себя:
🙂
Это предупреждение очень старое, задолго до появления децентрализованных систем контроля версий, таких как Git. В те времена, чтобы взломать ядро, вам нужно было сохранить свои изменения в виде набора собственных патчей. Поскольку некоторые (в основном неопытные разработчики, возившиеся с WordPress) не делали патчи, чтобы отслеживать свои изменения, они столкнулись с проблемой: в конце концов у них возникли проблемы с обновлением Worpdress до новой версии, и родилась поговорка.
Предупреждение было более или менее культурной отсылкой к подписи к изображению «Каждый раз, когда ты мастурбируешь… Бог убивает котенка», и, очевидно, предназначалось для развлечения. Однако была проведена аналогия между «взломом ядра WordPress» и «мастурбацией». Вероятно, это и привело к некоторой популярности.
Конечно, хакерское ядро — это двусторонний меч, и я думаю, именно поэтому вы спросили.
Во-первых, взламывать ядро вполне допустимо, возможно и осуществимо как в прошлом, так и в настоящем. В прошлом с помощью наборов исправлений, а сегодня стало еще проще, используя git и репозиторий git WordPress, общедоступный на Github.
Вместо того, чтобы говорить пользователям (которые могут даже не понимать, о чем идет речь), что они тупые, шутя о них, лучше поощрять их и обучать их.
Кроме того, и это одна из самых темных сторон в истории WordPress, сообщество WordPress не продвигается здесь хорошо. Несмотря на то, что он как бы побуждает пользователей вносить изменения в восходящий поток (то есть в исходный репозиторий кода), что обычно хорошо, WordPress не делает этого для библиотек, которые они перенесли в свое дерево из исходных источников. Так что относитесь к этим высказываниям легкомысленно, это не то, чем руководство WordPress и основные разработчики следовали за кодом, который они также переняли у других.
Так что если судить о поговорке, глядя на руки разработчиков, то это чисто шутка, это просто вульгарная культурная отсылка.
Лучшее предложение, которое я могу дать, это если вы разработчик и хотите внести изменения в ядро, сделайте это. Делайте так, как нравится вам, а не другим. WordPress является бесплатным программным обеспечением по определенной причине, и вы должны гордиться им и тем, что вы делаете с ним. Публично или приватно. Если вы ищете способы сделать это более выполнимым, создайте вокруг него рабочий процесс, как если бы вы занимались другими видами разработки.
Мне три с половиной раза приходилось взламывать ядро, чтобы решить проблему.
1) Исправлена ошибка. Я сообщил об этом как об ошибке в Trac вместе с патчем diff. Функциональность уже перерабатывается в следующей версии WP, что в основном устраняет ошибку. До тех пор я могу легко применить созданный мной патч к текущим/новым установкам.
2) Было добавлено очень подробное ведение журнала, чтобы попытаться отследить очень конкретную проблему, с которой столкнулся пользователь. Не повседневная ситуация и уж точно не связанная с функциональностью.
3a) Я хотел добавить дополнительное поле в категории в WP 2.8.5. Встроенные хуки для этого не работали должным образом (известная проблема), и я полагаю, что эта конкретная проблема была исправлена в дереве 2.9. В конце концов, реализация была ошибочной, и мы переработали эту функцию, чтобы она работала по-другому, не требуя модификации ядра.
3b) Я думал, что мне нужно изменить ядро, чтобы изменить ссылки для модерации комментариев, но пока я копался, я нашел несколько хуков, о которых раньше не знал, и смог реализовать эту функцию в виде плагина.