Sửa đổi tập tin lõi WordPress


21

Tại sao?

Đôi khi, một cách khắc phục dễ dàng để thay đổi hành vi của chính WordPress hoặc plugin có thể là thay đổi trực tiếp các tệp của plugin hoặc WordPress. Khi nảy ra ý tưởng như vậy, câu trả lời thông thường là:

Đừng hack lõi.

Tại sao nói chung là một ý tưởng tồi để thay đổi các tập tin cốt lõi?

Xem xét?

Tuy nhiên, đôi khi, những điều có thể quan trọng đối với một trang web chỉ đơn giản là không thể thực hiện được, theo cách tốt đẹp mà không thay đổi các tệp cốt lõi. Khi ở trong một tình huống như vậy, bạn cần lưu ý điều gì, trước khi bạn tiếp tục và bắt đầu hack cốt lõi?

Làm sao?

Bạn đã xem xét tất cả các tùy chọn, nhưng giải pháp duy nhất là hack các tệp cốt lõi. Làm thế nào bạn nên đi về làm điều này? Làm thế nào sẽ có một lõi thay đổi, ảnh hưởng đến quy trình công việc, như cập nhật?


1
Tôi hoàn toàn không đồng ý với bất kỳ khuyến nghị nào để hack core vì tôi vẫn chưa tìm thấy một điều duy nhất tôi không thể làm việc xung quanh. Những người duy nhất có bất kỳ hoạt động hack lõi kinh doanh nào cho một trang web sản xuất là những người hoàn toàn không cần phải đọc bất cứ điều gì về chủ đề này vì có lẽ họ đã ở trong nhóm cốt lõi của WordPress. Giải thích cho mọi người cách thực hiện đơn giản là cung cấp cho 99 trong số 100 người chắc chắn không nên làm điều đó một cách hợp lý hóa các quyết định của họ. Và tôi thực sự ghét khi thấy điều đó được kích hoạt ở đây. JMTCW.
MikeSchinkel

Để theo dõi, đây là một ví dụ về câu hỏi đầu tiên là "Không thể" và tôi đã trả lời bằng một ví dụ cho thấy cách thức: wordpress.stackexchange.com/questions/972/#984 Có một cách (hầu như luôn luôn) làm điều đó với cốt lõi hack.
MikeSchinkel

2
Nếu bạn thay đổi lõi, bạn sẽ phải thực hiện lại các thay đổi sau mỗi lần nâng cấp và bạn sẽ cài đặt không chuẩn để mọi người khó giúp bạn hơn. Chỉ cần tạo một plugin, một widget, một mẫu, một hook hoặc bất kỳ phương thức nào mà wordpress cung cấp cho bạn để không phải thay đổi lõi.
Wadih M.

Wadih là chính xác. Tôi đã thực hiện các thay đổi đối với một số tệp cốt lõi để khắc phục / cải thiện / tùy chỉnh nhiều thứ khác nhau và tôi luôn cảm thấy thất vọng khi nâng cấp vì tôi phải kiểm tra các thay đổi và áp dụng các bản vá của mình cho các tệp mới. Điều này thậm chí còn bực bội hơn khi các tệp mới quá khác biệt so với các tệp cũ và vị trí của các thay đổi không còn rõ ràng (hoặc thậm chí hiện diện cả).
Synetech

1
Đó là như tôi sợ; đôi khi khi không có các móc tinh chỉnh (chẳng hạn như sửa đổi Trang web của tôi), các móc duy nhất hoạt động cho thủ thuật đầu ra được đệm là admin_body_classadmin_footercó nghĩa là chụp toàn bộ trang . Tôi vừa thử nó và có> 2 MB nội dung phải được tìm kiếm cho phần có liên quan, sau đó phân tích cú pháp và sửa đổi trước khi xuất. Hoặc, tôi có thể thêm một dòng mã vào phần bên phải my-sites.phpvà sử dụng công cụ tìm khác biệt để áp dụng bản vá sau khi cập nhật (giả sử nó đã được sửa đổi). Thật sự rất khó để tạo ra một trường hợp chống lại việc sửa đổi lõi trong các tình huống như thế này.
Synetech

Câu trả lời:


21

Nếu bạn phải hack lõi, hãy xem xét làm theo cách mà nó có thể mở rộng cho người khác.

Thêm một móc hành động

Chín trong số mười lần, bạn có thể làm những gì bạn muốn nếu chỉ có một do_actioncuộc gọi thêm trong một tệp cụ thể. Trong trường hợp đó, thêm hành động, ghi lại tài liệu và gửi bản vá qua Trac . Nếu có một lý do chính đáng cho bản vá của bạn (tức là bạn không phải là người duy nhất từng sử dụng nó) thì có lẽ bạn có thể thêm nó vào lõi.

Tiếp theo, xây dựng một trình cắm tùy chỉnh (bạn không phải phát hành / phân phối nó!) Liên kết với móc mới này và thực hiện bất kỳ chức năng nào bạn cần nó để làm.

Tái cấu trúc một tập tin cốt lõi

Những lần khác, bạn có thể chỉ cần một đoạn mã để hành xử khác đi. Truyền một biến bằng tham chiếu, ví dụ, hoặc trả về một giá trị thay vì lặp lại nó. Hãy dành chút thời gian để ngồi xuống và cấu trúc lại mã để nó thực hiện những gì bạn cần làm ... sau đó gửi một bản vá qua Trac để những người còn lại có thể hưởng lợi từ công việc của bạn.


Bạn có thấy một chủ đề đang phát triển ở đây không? Hacking core không nhất thiết là không ... chỉ là thứ mà hầu hết các nhà phát triển sẽ không khuyến khích cho người dùng mới hoặc lập trình viên mới làm quen (nếu bạn hỏi chúng tôi cách làm gì đó, chúng tôi sẽ đề xuất một trình cắm mỗi lần trước cả xem xét để đề nghị bạn hack lõi).

Hacking cốt lõi là cách WordPress phát triển và phát triển, nhưng thật nguy hiểm cho ai đó chỉ học PHP hoặc không có kinh nghiệm làm việc với các tệp WP. Vui lòng bắt đầu với một trình cắm trước khi chạm vào lõi - nếu bạn ngắt trình cắm, bạn có thể gỡ cài đặt nhanh chóng (xóa qua FTP nếu cần) ... nhưng nếu bạn phá vỡ lõi, điều xấu có thể xảy ra với trang web của bạn và có khả năng xảy ra với trang web của bạn cơ sở dữ liệu là tốt.

Nhưng nếu bạn đang ở trong một tình huống mà việc hack lõi là không thể tránh khỏi, thì hãy thay đổi. Ngoài ra, xuất bản thay đổi của bạn ở một vị trí nổi bật (nếu blog của bạn được hiển thị rõ ràng, điều đó có thể là đủ ... nhưng tôi đề nghị Trac vì đó là cách thay đổi cộng đồng được đưa vào bản phát hành tiếp theo). Thay đổi của bạn có thể là viên đạn ma thuật có thể khắc phục sự cố trong hàng trăm trang web khác nhau ... vì vậy hãy đóng góp lại cho cộng đồng đã giúp bạn xây dựng trang web của mình.

Nếu thay đổi được cam kết, thì hack của bạn trở thành một phần cốt lõi và bạn sẽ không cần phải lo lắng về nó trong tương lai. Nếu không, ít nhất bạn có tài liệu chi tiết về cách triển khai lại bản hack sau khi bạn nâng cấp WP sau 3 tháng.


Từ ngữ tốt hơn nhiều sau đó của tôi :)
hakre

3

Đừng hack lõi.

Vâng, đó là bởi vì đó là một gợi ý cho cấp độ đầu tiên, người dùng thiếu kinh nghiệm. Những lõi hack đó sẽ phá vỡ cài đặt của họ, họ không thể đảm bảo rằng những thay đổi của họ vẫn tiếp tục cập nhật, v.v.

Chắc chắn, hack lõi!

Chắc chắn bạn thực sự có thể hack core, ví dụ bằng cách sử dụng một hệ thống quản lý phiên bản như SVN. Nó giúp bạn giữ các thay đổi của riêng bạn trên mã lõi phù hợp với các bản cập nhật dự án. Nó cũng giúp tạo các bản vá cho Wordpress và gửi chúng cho dự án.

Hacking cốt lõi là nguyên vẹn làm cho Wordpress phát triển.

Cân nhắc

Nếu bạn không muốn cài đặt SVN đầy đủ và bạn vẫn biết (một số) tệp nào bạn đã thay đổi, bạn có thể sử dụng các công cụ cấp thấp hơn như Diff / Merge (để giành chiến thắng: WinMerge ) hoặc trình chỉnh sửa có khả năng so sánh (ví dụ: Notepad ++ với Plugin So sánh ). Trên Linux, bạn có thể dễ dàng cài đặt các tiện ích dòng lệnh làm tương tự. Trình soạn thảo Geany đi kèm với btw tích hợp shell đẹp. .

Tôi thích PDT Eclipse cho các công việc khó khăn. Nhưng đó không phải là để chỉnh sửa nhanh hay hack.

Vì vậy, tôi sẽ nói, nếu bạn đang sử dụng các công cụ phù hợp và bạn muốn chăm sóc hack thì cốt lõi là cách tốt nhất. Nếu bạn đang hack thứ gì đó còn sót lại trên một số máy chủ người dùng Noob khác (yup, Wordpress khá phổ biến), chỉ cần cung cấp một plugin có thể bị loại bỏ dễ dàng nếu nó phá vỡ thứ gì đó.


Hack lõi là KHÔNG BAO GIỜ là một giải pháp tốt trong thời gian dài. KHÔNG BAO GIỜ.
Fredy31

@ Fredy31; Đó là cách duy nhất để giữ cho bản cài đặt wordpress của bạn luôn cập nhật, hoạt động và bảo mật. Ngoài ra, "về lâu dài" mà bạn nói ở đây thực sự rất dài nếu phải mất hai năm và lâu hơn giữa việc cung cấp một bản vá cho Wordpress và sau đó đưa nó vào. Thậm chí lâu hơn để báo cáo vấn đề không có bản vá. Bảo trọng.
hakre

1
Rõ ràng hack cốt lõi là rắc rối, nhưng tôi thấy sự kháng cự và vitriol đối với nó ở đây đáng ngạc nhiên. Trong hầu hết các lĩnh vực khác của FOSS, việc rèn giũa được khuyến khích tích cực. Tại sao tùy chỉnh WordPress lại vô cảm? Tôi đã thấy vô số dự án khác thực hiện chính xác như đề xuất bằng cách sử dụng RCS để tạo phiên bản sửa đổi của chương trình trong khi cập nhật với thân cây. +1 để đưa ra cảnh báo rõ ràng nhưng nói sự thật rằng điều đó thực sự có thể và đưa ra gợi ý rõ ràng về cách thực hiện với ít khó khăn nhất.
Synetech

Ồ, và tôi chỉ nhớ rằng các chủ đề trẻ em làm chính xác điều này! Khi bạn tạo một chủ đề con, về cơ bản, bạn đang từ bỏ cha mẹ và bất cứ khi nào cha mẹ được cập nhật, bạn phải sao chép thủ công mọi thay đổi cho con. Vì vậy, sự ghét bỏ sửa đổi lõi này không phù hợp với một hành vi WordPress giống hệt, khác được chấp nhận.
Synetech

2

Các vấn đề là:

  1. Mỗi khi bạn thực hiện cập nhật lõi (ví dụ: do sửa lỗi bảo mật, v.v.), bạn sẽ phải cập nhật thủ công, thay vì chạy trình cập nhật tự động.
    Nếu bạn muốn làm điều này, thì hãy làm cho cuộc sống dễ dàng hơn cho chính mình:
    • đánh dấu mọi thay đổi bằng một điểm đánh dấu chung (.eg // PATCH START// PATCH END)
    • sử dụng một công cụ như WinMerge để so sánh nguồn hiện có với nguồn mới và sao chép qua các thay đổi trong đó cần thiết.
    • bạn sẽ phải coi chừng trong trường hợp khu vực mã mà bạn đang sao chép đã thay đổi và thực hiện các thay đổi phù hợp cho các bản vá của bạn
    • lưu ý rằng đây là một công việc 'không bao giờ kết thúc', chiếm thời gian có thể tính hóa đơn, trừ khi bạn có thể nạp tiền cho khách hàng của mình cho nó.
  2. Bạn có thể gây ra sự cố không tương thích với các plugin mong muốn lõi hoạt động theo một cách nhất định - điều này sẽ yêu cầu thử nghiệm thêm

Đôi khi điều này là không thể tránh khỏi 100%, nhưng tôi gần như luôn có thể đưa ra một cách khác để đạt được mọi thứ, hoặc thay đổi thông số kỹ thuật do chi phí thời gian dành cho việc này. Đó chỉ là một cơn ác mộng bảo trì và nhiều người tìm cách hack lõi, thay vì tìm kiếm giải pháp thích hợp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.