Modificando arquivos principais do WordPress

21

Por quê?

Às vezes, uma solução fácil para alterar o comportamento do WordPress ou de um plugin pode ser alterar diretamente os arquivos do plugin ou do WordPress. Ao ter essa ideia, a resposta usual é:

Não corte o núcleo.

Por que geralmente é uma má idéia alterar os arquivos principais?

Considerar?

Às vezes, no entanto, coisas que podem ser críticas para um site são simplesmente impossíveis, de uma maneira agradável, sem alterar os arquivos principais. Em uma situação dessas, do que você precisa estar ciente antes de prosseguir e iniciar o núcleo de hackers?

Quão?

Você considerou todas as opções, mas a única solução é invadir os arquivos principais. Como você deve fazer isso? Como ter um núcleo alterado influenciará os fluxos de trabalho, como a atualização?

googletorp
fonte
1
Discordo totalmente de todas as recomendações para hackear o núcleo, pois ainda tenho que encontrar uma coisa que não poderia ser contornada. As únicas pessoas que têm um núcleo de hackers de negócios para um site de produção são aquelas que não precisam absolutamente ler nada sobre esse tópico, pois provavelmente já estão na equipe principal do WordPress. Explicar às pessoas como fazê-lo simplesmente oferece 99 de 100 pessoas que definitivamente não deveriam fazer dessa maneira de racionalizar suas decisões. E eu realmente odiaria ver isso ativado aqui. JMTCW.
MikeSchinkel 10/09/10
Como acompanhamento, aqui está um exemplo de uma pergunta que foi a primeira resposta "Não é possível" e eu respondi com um exemplo mostrando como: wordpress.stackexchange.com/questions/972/#984 Existe (quase sempre) uma maneira de faça isso sem o núcleo de hackers.
MikeSchinkel #
2
Se você alterar o núcleo, precisará refazer as alterações após cada atualização e tornar sua instalação fora do padrão, tornando mais difícil para as pessoas ajudá-lo. Basta criar um plugin, um widget, um modelo, um gancho ou qualquer um dos muitos métodos que o wordpress fornece para que você não precise alterar o núcleo.
Wadih M.
Wadih está correto. Fiz alterações em alguns dos arquivos principais para corrigir / melhorar / personalizar várias coisas e sempre fiquei frustrado ao atualizar porque tenho que verificar se há alterações e aplicar meus patches aos novos arquivos. Isso é ainda mais frustrante quando os novos arquivos são muito diferentes dos antigos e os locais das alterações não são mais óbvios (ou mesmo presentes).
precisa saber é o seguinte
1
É como eu temia; às vezes, quando não há ganchos refinados (como modificar Meus Sites), os únicos ganchos que funcionam para o truque de saída em buffer são admin_body_classe o admin_footerque significa capturar a página inteira . Eu apenas tentei e há> 2 MB de conteúdo que deve ser pesquisado na seção relevante, depois analisado e modificado antes da saída. Ou então, posso adicionar uma linha de código à parte correta my-sites.phpe usar uma ferramenta diff para aplicar o patch após as atualizações (supondo que ele tenha sido modificado). É realmente difícil argumentar contra a modificação do núcleo em cenários como este.
Synetech 28/07

Respostas:

21

Se você precisar hackear o core, considere fazê-lo de uma maneira que o torne extensível para outras pessoas.

Adicionar um gancho de ação

Nove em cada dez vezes, você poderia fazer o que queria se houvesse uma do_actionchamada extra em um arquivo específico. Nesse caso, adicione a ação, documente e envie um patch via Trac . Se houver uma boa razão para o seu patch (ou seja, você não é o único que o utilizaria), provavelmente poderá adicioná-lo ao núcleo.

Em seguida, crie um plug-in personalizado (você não precisa liberá-lo / distribuí-lo!) Que se conecta a esse novo gancho e executa qualquer função que você precise.

Refatorar um arquivo principal

Outras vezes, você pode precisar apenas de um pedaço de código para se comportar de maneira diferente. Passe uma variável por referência, por exemplo, ou retorne um valor em vez de repeti-lo. Reserve um tempo para sentar e refatorar o código para que ele faça o que você precisa ... envie um patch pelo Trac para que o restante de nós possa se beneficiar do seu trabalho.


Você vê um tema se desenvolvendo aqui? O núcleo de hackers não é necessariamente um não-não ... apenas algo que a maioria dos desenvolvedores desencorajará para novos usuários ou programadores iniciantes (se você está nos perguntando como fazer algo, sugerimos um plug-in todas as vezes antes de considerando sugerir que você corrompa o núcleo).

O núcleo do hacking é a maneira como o WordPress se desenvolve e evolui, mas é perigoso para alguém que está apenas aprendendo PHP ou sem experiência em trabalhar com arquivos WP. Comece com um plug-in antes de tocar no núcleo - se você o interromper, poderá desinstalá-lo rapidamente (removendo via FTP, se necessário) ... mas se você romper o núcleo, coisas ruins podem acontecer ao seu site e potencialmente ao seu site. banco de dados também.

Mas se você estiver em uma situação em que um hack principal é inevitável, faça a alteração. Além disso, publique sua alteração em um local de destaque (se o seu blog for altamente visível, isso pode ser suficiente ... mas sugiro o Trac porque é assim que as alterações da comunidade são atraídas para a próxima versão). Sua alteração pode ser a bala mágica que pode resolver problemas em centenas de sites diferentes ... por isso, contribua para a comunidade que o ajudou a criar seu site.

Se a alteração for confirmada, seu hack se tornará parte essencial e você não precisará se preocupar com isso no futuro. Caso contrário, pelo menos você possui documentação detalhada sobre como reimplementar o hack após atualizar o WP em 3 meses.

EAMann
fonte
Muito melhor redação então o meu :)
hakre
3

Não corte o núcleo.

Bem, isso é porque é uma sugestão para usuários inexperientes e de primeiro nível. Os hackers interrompem a instalação, não podem garantir que suas alterações persistem em uma atualização etc.

Claro, hack core!

Claro que você pode realmente hackear o núcleo, por exemplo, usando um sistema de gerenciamento de versões como o SVN. Ele ajuda a manter suas próprias alterações no código principal alinhadas com as atualizações do projeto. Também ajuda a criar patches para o Wordpress e enviá-los para o projeto.

O núcleo de hackers está de fato fazendo o Wordpress evoluir.

Considerações

Se você não deseja instalar um SVN completo e ainda sabe quais (alguns) arquivos foram alterados, pode usar mais ferramentas de baixo nível, como Diff / Merge (para win: WinMerge ) ou editores com recursos de comparação (por exemplo, Notepad ++ com Compare Plugin ). No Linux, você pode instalar facilmente utilitários de linha de comando que fazem o mesmo. O editor Geany vem com uma ótima integração de shell entre btw. .

Eu prefiro o Eclipse PDT para os trabalhos difíceis. Mas isso não é para edição rápida ou invasão.

Então, eu diria que, se você estiver usando as ferramentas certas e quiser tomar cuidado, invadir o núcleo é o caminho a seguir. Se você estiver hackeando algo que sobrou em algum outro servidor de usuários Noob (sim, o Wordpress é bastante popular), forneça um plugin que possa ser jogado fora facilmente se quebrar alguma coisa.

hakre
fonte
O núcleo de hackers NUNCA é uma boa solução a longo prazo. NUNCA.
Fredy31
@ Fredy31; É a única maneira de manter sua instalação do wordpress atualizada, funcionando e segura. Além disso, o "longo prazo" de que você fala aqui é realmente longo, se demorar dois anos ou mais entre o fornecimento de um patch para o Wordpress e a sua entrada. Ainda mais por relatar um problema sem patch. Cuidar.
23413 hakre
1
Obviamente, o núcleo de hackers é problemático, mas acho a resistência e o vitríolo nele surpreendentes. Em praticamente todas as outras áreas do software livre, a bifurcação é ativamente incentivada. Por que personalizar o WordPress é tão anátema? Já vi inúmeros outros projetos fazer exatamente o que o hakre sugeriu, usando um RCS para criar uma versão modificada de um programa, mantendo-se atualizado com o tronco. +1 por dar o aviso óbvio, mas dizendo a verdade de que é realmente possível e dando a sugestão óbvia de como isso pode ser feito com o mínimo de dificuldade.
21413 Synetech
Ah, e acabei de me lembrar que os temas infantis fazem exatamente isso! Quando você cria um tema filho, está essencialmente bifurcando o pai e sempre que o pai é atualizado, você deve copiar manualmente quaisquer alterações no filho. Portanto, esse ódio à modificação do núcleo é inconsistente com outro comportamento idêntico do WordPress que foi aceito.
Synetech 27/07
2

Os problemas são:

  1. Toda vez que você fizer uma atualização do núcleo (por exemplo, devido a uma correção de segurança, etc.), será necessário atualizá-lo manualmente, em vez de executar o atualizador automático.
    Se você deseja fazer isso, facilite a vida:
    • marque todas as alterações com um marcador comum (.eg // PATCH STARTe // PATCH END)
    • use uma ferramenta como o WinMerge para comparar a fonte existente com a nova e copie as alterações sempre que necessário.
    • você precisará observar se a área do código que você está copiando mudou e fazer as alterações apropriadas em seus patches
    • esteja ciente de que este é um trabalho "interminável", ocupando um tempo faturável, a menos que você possa agregar seu cliente a ele.
  2. Você pode causar problemas de incompatibilidade com plug-ins que esperam que o núcleo funcione de uma certa maneira - isso exigirá testes extras

Às vezes, isso é 100% inevitável, mas quase sempre consigo encontrar outra maneira de conseguir as coisas, ou alterar as especificações devido ao provável custo de tempo gasto fazendo isso. É apenas um pesadelo de manutenção, e muitas pessoas optam pelo núcleo de hackers, em vez de procurar a solução adequada.

Dan Smart
fonte