WordPress çekirdek dosyalarını değiştirme


21

Niye ya?

Bazen WordPress'in kendisinin veya bir eklentinin davranışını değiştirmeye yönelik kolay bir düzeltme, eklenti veya WordPress'in dosyalarını doğrudan değiştirmek olabilir. Böyle bir fikir ortaya çıktığında, olağan cevap şöyledir:

Çekirdeği kırma.

Çekirdek dosyalarını değiştirmek neden genel olarak kötü bir fikirdir?

Düşünmek?

Bununla birlikte, bazen, bir site için kritik olabilecek şeyleri, çekirdek dosyaları değiştirmeden, güzel bir şekilde yapmak imkansızdır. Böyle bir durumda, devam etmeden ve hack çekmeden önce nelere dikkat etmeniz gerekiyor?

Nasıl?

Tüm seçenekleri düşündünüz, ancak tek çözüm çekirdek dosyaları kırmak. Bunu nasıl yapacaksın? Değişmiş bir çekirdeğe sahip olmak, güncelleme gibi iş akışlarını nasıl etkiler?


1
Üzerinde çalışamayacağım tek bir şey bulamadığım için çekirdeği kırma konusunda hiçbir tavsiyeye kesinlikle katılmıyorum. Bir üretim sitesi için hack çeken bir işi olan insanlar, muhtemelen zaten WordPress çekirdek ekibinde oldukları için bu konuda kesinlikle bir şey okumaya gerek duymayanlardır. İnsanlara nasıl yapılacağını açıklamak, kararlarını rasyonelleştirmek için kesinlikle yapmaması gereken 100 kişiden 99'unu verir. Ve bunun burada etkin olduğunu görmekten nefret ediyorum. JMTCW.
MikeSchinkel 10:10

Bir takip olarak, işte ilk cevaplayan ve "Bu mümkün değil" şeklinde cevaplanan bir soru örneği. Nasıl bir örnekle cevap verdim: wordpress.stackexchange.com/questions/972/#984 (neredeyse her zaman) hack çekirdeksiz yap.
MikeSchinkel

2
Çekirdeği değiştirirseniz, her yükseltme işleminden sonra değişiklikleri yeniden yapmanız gerekir ve kurulumunuzu standart dışı hale getirirsiniz, böylece insanların size yardım etmesini zorlaştırırsınız. Sadece bir eklenti, bir widget, bir şablon, bir kanca veya wordpress gibi birçok yöntemden herhangi biri çekirdeği değiştirmek zorunda kalmamanızı sağlar.
Wadih M.

Wadih haklı. Bazı şeyleri düzeltmek / geliştirmek / özelleştirmek için bazı çekirdek dosyalarında değişiklikler yaptım ve yükseltme yaparken her zaman sinir bozuldum çünkü değişiklikleri kontrol etmek ve yamalarımı yeni dosyalara uygulamak zorunda kalıyorum. Yeni dosyalar eskisinden çok farklı olduğunda ve değişikliklerin yerleri artık belirgin olmadığında (hatta hiç mevcut değilse) bu daha da sinir bozucu olur.
Synetech

1
Korktuğum gibi; Bazen hiçbir rafine kanca bulunmadığında (Sitelerimi değiştirme gibi), tamponlanmış çıktı numarası için çalışan tek kancalar admin_body_classve sayfanın tamamınıadmin_footer yakalamak anlamına gelir . Daha yeni denedim ve ilgili bölüm için aranması gereken> 2 MB içerik var, ardından çıktısı alınmadan önce ayrıştırıldı ve değiştirildi. Ya da sağ tarafına bir kod satırı ekleyebilir ve güncellemelerden sonra düzeltme ekini uygulamak için diff aracını kullanabilirim (hiç değiştirilmiş olduğu varsayılarak). Bu gibi senaryolarda çekirdeği değiştirmeye karşı bir dava açmak gerçekten zor. my-sites.php
Synetech

Yanıtlar:


21

Eğer varsa gereken çekirdek kesmek, diğerleri için genişletilebilir kılan bir şekilde bu konuyu dikkate alın.

Bir Eylem Kancası Ekleme

Dokuz defa on kez, sadece do_actionbelirli bir dosyada fazladan bir arama yapıldığında ne istersen yapabilirsin . Bu durumda, eylemi ekleyin, belgelendirin ve Trac aracılığıyla bir yama gönderin . Düzeltme ekiniz için iyi bir neden varsa (yani, onu kullanacak tek kişi siz değilsiniz), muhtemelen çekirdeğe eklemesini sağlayabilirsiniz.

Ardından, bu yeni kancaya bağlanan ve yapmanız gereken işlevi yerine getiren özel bir eklenti oluşturun (yayınlamanız / dağıtmanız gerekmez!).

Refactor bir çekirdek dosya

Diğer zamanlarda, farklı davranabilmek için bir kod parçasına ihtiyacınız olabilir. Örneğin bir değişkeni referansa göre iletin ya da yankı yerine bir değer döndürün. Oturup kodunuzu yeniden düzenlemek için biraz zaman ayırın, böylece yapmanız gerekenleri yapar ... sonra Trac aracılığıyla bir yama göndeririz, böylece geri kalanınız işinizden faydalanabiliriz.


Burada gelişen bir tema görüyor musunuz? Çekirdeği kesmek mutlaka hayır amaçlı değil ... sadece çoğu geliştiricinin yeni kullanıcılar veya yeni başlayan programcılar için cesaretini kıracağı bir şey (bize bir şeyi nasıl yapacağımızı sorarsanız, daha önce bir eklenti önereceğiz) size çekirdek kesmek önermeyi düşünüyor).

Çekirdeği kesmek, WordPress'in gelişmesi ve geliştiği bir yöntemdir, ancak PHP'yi yalnızca öğrenen veya WP dosyalarıyla çalışma deneyimi olmayan biri için tehlikelidir. Lütfen çekirdeğe dokunmadan önce bir eklentiyle başlayın - bir eklentiyi keserseniz hızlı bir şekilde kaldırabilirsiniz (gerekirse FTP üzerinden kaldırma) ... ancak çekirdeği keserseniz sitenize ve potansiyel olarak sitenize kötü şeyler olabilir veritabanı da.

Ancak, çekirdek kesmenin kaçınılmaz olduğu bir durumdaysanız, değişikliği yapın. Ayrıca, değişikliklerinizi belirgin bir yerde yayınlayın (blogunuz oldukça görünürse, bu yeterli olabilir ... ancak Trac’i öneririm çünkü topluluk değişiklikleri bir sonraki sürümde bu şekilde kullanılır). Değişikliğiniz yüzlerce farklı sitedeki sorunları çözebilecek sihirli mermi olabilir ... bu yüzden sitenizi oluşturmanıza yardımcı olan topluluğa geri dönün.

Değişim gerçekleşirse, kesmeniz çekirdeğin bir parçası olur ve gelecekte endişelenmenize gerek kalmayacaktır. Olmazsa, en azından 3 ay içinde WP'yi yükselttikten sonra hackin nasıl uygulanacağına ilişkin ayrıntılı belgeleriniz var.


Çok daha iyi ifadeler sonra benim :)
hakre

3

Çekirdeği kırma.

Çünkü bu birinci seviye, deneyimsiz kullanıcılar için bir öneri. Çekirdekleri kesen çekirdekler kurulumlarını bozacak, değişikliklerinin bir güncellemenin devam etmesini vb. Sağlayamaz.

Tabii, çekirdek kesmek!

Tabii ki, örneğin SVN gibi bir sürüm yönetim sistemi kullanarak çekirdeği hackleyebilirsiniz. Çekirdek koddaki kendi değişikliklerinizi proje güncellemelerine uygun tutmanıza yardımcı olur. Ayrıca Wordpress için yamalar oluşturmanıza ve projeye göndermenize yardımcı olur.

Çekirdeği kesmek, Wordpress'in gelişmesini sağlamak için etkilidir.

hususlar

Tam bir SVN yüklemek istemiyorsanız ve hala hangi (bazı) dosyalarınızı değiştirdiğinizi biliyorsanız, Diff / Merge (kazanmak için: WinMerge ) veya karşılaştırma özelliklerine sahip editörler gibi daha düşük düzeyli araçlar kullanabilirsiniz (örn. Eklenti ile Notepad + + ). Linux'ta, aynısını yapan komut satırı yardımcı programlarını kolayca yükleyebilirsiniz. Geany editör Btw güzel kabuk entegrasyonu ile geliyor. .

Zor işler için Eclipse PDT'yi tercih ederim. Ama bu hızlı düzenleme veya kesmek için değil.

Bu yüzden, doğru araçları kullanıyorsanız ve çekirdeği hacklemeye dikkat etmek istiyorsanız bunun yoludur. Birlikte başka bir Noob kullanıcısı sunucusunda kalan bir şeyi hackliyorsanız (evet, Wordpress oldukça popülerdir), yalnızca bir şeyi kırarsa kolayca dışarı atılabilecek bir eklenti sağlayın.


Çekirdek kesmek, ASLA uzun vadede iyi bir çözüm değildir. ASLA.
Fredy31

@ Fredy31; WordPress kurulumunuzu güncel, çalışır ve güvende tutmanın tek yolu bu. Ayrıca burada bahsettiğiniz "uzun yol" , Wordpress'e bir yama sağlamak ve daha sonra içeri girmek arasında iki yıl veya daha uzun sürerse gerçekten de uzundur. Yama olmadan bir sorunu bildirdiğiniz için daha uzun. Kendine iyi bak.
hakre

1
Açıkçası çekirdeği kırmak zahmetli, ancak burada direnci ve vitriolunu şaşırtıcı buluyorum. FOSS'un hemen her alanında, çatallama aktif olarak desteklenir. WordPress'i neden bu kadar anathema özelleştirmek? Diğer projelerin de, aynen bir programın değiştirilmiş bir versiyonunu oluşturmak için bir RCS kullanarak, bagaja ayak uydurarak hak ettiği gibi aynısını yaptım. Bariz uyarı vermek, ancak bunun gerçekten mümkün olduğunu söylemek ve en az zorluk ile nasıl yapılabileceğinin açık önerisini vermek için +1.
Synetech

Oh, hatırladım da çocuk temalarının tam olarak bunu yaptığını! Bir çocuk teması oluşturduğunuzda, esas olarak ebeveyni belirtirsiniz ve ebeveyn her güncellendiğinde, çocuğa yapılan değişiklikleri manuel olarak kopyalamanız gerekir. Dolayısıyla, bu çekirdek değiştirme nefreti, kabul edilen başka bir aynı WordPress davranışı ile tutarsız.
Synetech

2

Sorunlar:

  1. Çekirdeğin bir güncellemesini her yaptığınızda (örneğin, bir güvenlik düzeltmesi vb.), Otomatik güncelleyiciyi çalıştırmak yerine, el ile güncellemeniz gerekir.
    Bunu yapmak istiyorsanız, hayatı kendiniz için kolaylaştırın:
    • her değişikliği ortak bir işaretleyici ile işaretleyin (.eg // PATCH STARTve // PATCH END)
    • Mevcut kaynağı yeni kaynakla karşılaştırmak için WinMerge gibi bir araç kullanın ve gerekli olduğunda değişiklikleri kopyalayın.
    • Kopyaladığınız kod alanının değişmiş olması durumunda dikkat etmeniz ve yamalarınızda uygun değişiklikleri yapmanız gerekecektir.
    • Müvekkilinizi isyan edemediğiniz sürece, bunun 'hiç bitmeyen' bir iş olduğunu, faturalandırılabilir zaman alacağını unutmayın.
  2. Çekirdeğin belirli bir şekilde çalışmasını bekleyen eklentilerle uyumsuzluk sorunlarına neden olabilir - bu, ekstra test gerektirecektir

Bazen bu% 100 kaçınılmazdır, ancak neredeyse her zaman bir şeyleri başarmanın başka bir yolunu bulabilirim ya da bunu yapmak için harcanan zamanın muhtemel maliyeti nedeniyle spesifikasyonları değiştirebilirim. Bu sadece bir bakım kabusu ve çoğu insan doğru çözümü aramak yerine çekirdek kesmeye gidiyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.