Cách chỉnh sửa plugin wordpress mà không phá vỡ quy trình cập nhật của nó


8

Tôi muốn thêm một số tính năng / chức năng bổ sung với plugin WordPress đã có sẵn.

Có thể thực hiện tùy chỉnh của tôi trong khi cập nhật plugin?

Câu trả lời:


8

Chắc là không.

Cách được đề xuất để đưa các cải tiến của bạn vào plugin là: Gửi các bản sửa lỗi của bạn cho nhà phát triển và yêu cầu cô ấy hợp nhất chúng vào bản gốc. Nếu thay đổi của bạn là tùy chỉnh cá nhân, điều này sẽ không xảy ra.

Nếu plugin được viết theo kiểu OOP nghiêm ngặt, bạn có thể tạo một plugin thứ hai chỉ mở rộng các lớp từ bản gốc khi bạn cần (loại plugin con). Thật không may, hầu hết các nhà phát triển plugin không thấy nhu cầu này và không viết mã của họ cho phù hợp. Hãy nhận biết vấn đề thứ tự tải .

Chúng tôi có thể giúp tốt hơn nếu bạn mô tả plugin nào bạn muốn mở rộng và chính xác những gì bạn muốn thay đổi.


5

Thật không may, nó hoàn toàn phụ thuộc vào plugin (hoặc chính xác hơn là vào tác giả plugin!) Nếu tác giả đã suy nghĩ tích cực và tạo plugin theo cách để làm cho nó có thể mở rộng, thì có, bạn có thể tạo plugin OWN của mình để thêm đến chức năng trong plugin hiện có.

Hãy lưu ý những gì Toscho đã chỉ ra - rằng thứ tự plugin của bạn có vấn đề (liên kết lại ở đây ).

Móc

Cách phổ biến nhất để làm cho plugin có thể mở rộng là thêm hook (hành động và bộ lọc hook) mà sau đó bạn có thể tận dụng với plugin của riêng mình. Nếu bạn có một trình soạn thảo mã tốt (hiện tại tôi đang sử dụng NetBeans ), bạn nên tìm kiếm thông qua các tệp nguồn của plugin cho: do_actionapply_filters. Nếu tác giả plugin đã cung cấp các hook đó, đây là một cách rất thuận tiện và dễ dàng để bạn vượt quá mặc định hoặc tiêm mã của riêng bạn.

Chức năng cắm

Nếu tác giả plugin hiểu biết, nhưng đang sử dụng không gian tên toàn cầu cho các chức năng của plugin, anh ấy / cô ấy có thể đã bao bọc các chức năng của plugin trong các if ( function_exists() )câu lệnh có điều kiện. Để điều này phát huy lợi thế của bạn, bạn phải đảm bảo plugin của bạn tải trước (có thể là một thách thức). Tất cả những gì bạn phải làm là khai báo hàm của mình bằng cùng một tên trong cùng một không gian tên chính xác và sau đó hàm của bạn sẽ thay thế hàm được sử dụng bởi plugin.

Sự mở rộng

Nếu tác giả plugin là một lập trình viên OOP giỏi, anh ấy / cô ấy có thể viết mã plugin theo cách đủ chi tiết để mở rộng (vì, như GOF sẽ nói, nó chắc chắn đã bị đóng để sửa đổi). Tìm kiếm nhiều mức độ chi tiết trong lớp plugin - nghĩa là các phương thức thực hiện các tác vụ nhỏ, đặc biệt cao - có thể được ghi đè trong lớp của riêng bạn mở rộng lớp của plugin. Tất nhiên, như Toscho đề cập, lớp cần phải được kiến ​​trúc theo cách mà nó có thể bị ghi đè, và việc triển khai mặc định của nó không hoàn toàn tự gọi.

Nĩa hoặc miếng vá

Nếu tác giả plugin đang sử dụng gitHub hoặc đã mở nguồn theo một cách khác, bạn có thể gửi một bản vá cho tác giả với các sửa đổi được đề xuất của bạn (cách tốt nhất của bạn là sửa đổi plugin để làm cho nó linh hoạt hoặc mạnh mẽ hơn mà không cần gỡ bỏ hoặc thay đổi các tính năng hoặc chức năng hiện có) hoặc bạn chỉ có thể tải xuống nguồn, sửa đổi tiêu đề plugin đến mức nó sẽ không còn được cập nhật khi tác giả gốc đẩy bản cập nhật ra và tốt nhất là gửi phiên bản cập nhật của bạn cho tác giả hoặc như thực thể riêng của nó trực tiếp đến WordPress . Xin lưu ý rằng nếu bạn gửi plugin cho WP, bạn sẽ cần phải có một trang web cho nó và nên sẵn sàng hỗ trợ nếu người khác tải xuống.


1

Tôi biết đó là một câu hỏi rất cũ nhưng tôi nghĩ rằng tôi đã tìm thấy giải pháp ...

Tôi có một plugin trong đó một trong những nhà phát triển của khách hàng của tôi đã sửa đổi nó thành giới hạn của thư mục & thư mục con, khi cập nhật các tệp sẽ bị xóa và plugin bị hỏng. Để làm cho plugin ban đầu độc lập với mọi cập nhật cốt lõi, tôi đã chuyển các tệp và thư mục đã sửa đổi sang một plugin riêng trong thư mục có tên là extension.

Sử dụng mã được tìm thấy tại https://gist.github.com/wpsmith/af206df2cf6a38e4e2f0

Tôi đã thêm lớp được xác định bởi Tarvis Smith WPS_Extend_Plugin.phpvà đưa nó vào plugin của mình. Sử dụng WPS_Extend_Pluginlớp Tôi đã chỉ thư mục tệp / thư mục mở rộng vào thư mục đích extension. Vẫn chưa có thất bại, nhưng tôi không chắc đây có phải là cách phù hợp để mở rộng plugin hay không!

// Require WPS_Extend_Plugin class
require_once( 'classes/WPS_Extend_Plugin.php' );

// Extend Sitepress Multilingual CMS
new WPS_Extend_Plugin( 'sitepress-multilingual-cms/sitepress.php', __FILE__, '3.9.0', 'CHERRY' );
// Extend AddThis
new WPS_Extend_Plugin( 'extension', __DIR__, '0.1', 'CHERRY' );

0

Tôi hiểu câu hỏi này thực sự cũ nhưng tôi cảm thấy điều này có thể giúp được ai đó.

Nếu bạn cảm thấy những thay đổi sẽ giúp ích cho cộng đồng, vui lòng gửi chúng cho nhà phát triển. Tuy nhiên, nếu các thay đổi là duy nhất cho cài đặt của bạn, bạn có thể tiếp tục đọc phần sau.

Tôi đã có vấn đề này về việc thay đổi phiên bản cập nhật của một chủ đề. Chúng tôi đã làm một đệ quy diff từ old_versionđến modified_old_versionvà sau đó áp dụng các bản vá nó tạo ra trên các phiên bản mới của chủ đề bằng cách sử dụng bản vá công cụ.

Các công cụ vá tạo các tệp với các thay đổi không thể được áp dụng tự động. Chúng tôi đã có một vài trong số đó, và có thể dễ dàng xác định và thực hiện các thay đổi đó theo cách thủ công.

Trong khi thực hiện các thay đổi, bạn phải đảm bảo rằng bạn không thay đổi khoảng cách cho toàn bộ tệp bằng các tính năng chỉnh sửa như tự động thụt lề, v.v. Nghĩa là chỉ thực hiện thay đổi khi cần thiết. Điều đó sẽ chỉ làm cho quá trình thực hiện các thay đổi tốn nhiều thời gian hơn sau này.

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.