Kết nối với các plugin


12

Tôi đang làm việc trên một plugin lý tưởng có thể thực hiện mọi việc khi người dùng thực hiện điều gì đó thông qua một plugin khác .

Tôi có thể thêm các móc tùy chỉnh trong các plugin đó nhưng rõ ràng điều này sẽ không hoạt động tốt khi tôi muốn phân phối plugin của mình. Có cách nào tốt để thêm móc vào plugin của người khác từ plugin của riêng tôi không? Là giải pháp thực sự duy nhất để yêu cầu tác giả đưa vào các móc tùy chỉnh để các nhà phát triển khác có thể xây dựng công việc của họ?

Ví dụ: Tôi muốn làm một cái gì đó trong plugin của mình khi ai đó đăng lại bài viết. Nếu có một cái móc tùy chỉnh trong bất cứ thứ gì mà plugin rạn phổ biến là tôi có thể nối vào và tắt, thì điều đó thật tuyệt. Không có, vì vậy tôi có thể sửa đổi plugin của họ để bao gồm nó, nhưng nó chỉ hoạt động cho bản sao của tôi và tôi không muốn cố gắng phân phối lại.

Chúng ta chỉ cần cố gắng và trở thành nhà phát triển plugin tốt hơn để tất cả chúng ta có thể chơi tốt cùng nhau?


1
Câu hỏi tuyệt vời!
MikeSchinkel

"Là giải pháp thực sự duy nhất để yêu cầu tác giả đưa vào các móc tùy chỉnh để các nhà phát triển khác có thể xây dựng công việc của họ?" Trong hầu hết các trường hợp, có. Có một số tình huống nhất định trong đó bạn có thể quản lý để gián tiếp móc vào plugin của họ, nhưng đó không phải là trường hợp thường xảy ra. Yêu cầu họ viết các plugin của họ như thể họ đang viết cho lõi WordPress - bao gồm bộ lọc / hành động bất cứ nơi nào người ta có thể cần nó.
Viper007Bond

1
Gợi ý: Tài liệu các hook mà plugin của bạn cung cấp để các tác giả plugin khác có thể tương tác với nó.
hakre

Câu trả lời:


6

@Ryan Elkins:

Tôi đoán câu trả lời phụ thuộc vào cách nhập từng trường hợp sử dụng đối với bạn. Trong một số trường hợp, đó sẽ là thứ bạn cần nhanh chóng và bẩn thỉu, trong những trường hợp khác, nó có thể là một trường hợp sử dụng quan trọng hơn. Đây là hai điều mà tôi suy nghĩ:

Tìm kiếm móc thay thế trong WordPress Core

Nếu đôi khi có thứ gì đó nhanh và bẩn, bạn có thể sử dụng các móc nối xuôi dòng khác từ lõi để sửa đổi những gì bạn cần, hoặc cả móc ngược dòng và hạ lưu thông qua việc sử dụng ob_start()/ ob_end_clean()(xem @Todd Perkins trả lời " Xử lý đầu ra HTML lớn thông qua mã plugin " cho một ví dụ mã.)

Để theo dõi các hook bạn có thể sử dụng, hãy kiểm tra plugin instrument Hook mà tôi đã đăng ngày hôm qua để giúp bạn tìm các hook mà bạn có khả năng có thể sử dụng.

Gửi một bản vá với Hook mong muốn của bạn cho Nhà phát triển Plugin

Nếu trường hợp sử dụng của bạn có ý nghĩa hơn đối với bạn hoặc cộng đồng, tôi khuyên bạn nên tiếp tục và thêm hook mà bạn cần vào plugin. Sau đó kiểm tra nó thật tốt để đảm bảo nó thực sự giải quyết trường hợp sử dụng của bạn sau đó bạn có thể gửi một bản vá cho nhà phát triển plugin với hy vọng rằng họ sẽ áp dụng nó. Bằng cách này, bạn làm cho chúng dễ dàng nhất có thể với chúng bằng cách cung cấp cho chúng mã đã được kiểm tra và bạn có thể tự mình xử lý trường hợp sử dụng để đảm bảo đó thực sự là thứ bạn cần. Tôi không thể nói cho bạn biết tần suất tôi nghĩ tôi chỉ cần một cái móc nhất định để tìm sau khi cố gắng thực hiện một cái tôi cần một cái móc nhưng cái khác với cái tôi hình dung trước tiên.

Nếu bạn không quen với việc tạo một bản vá thì đây là một bài viết hay về việc vá lõi WordPress, trong đó áp dụng nhiều nhất cho việc vá các plugin và đối với những điều không hy vọng thì rõ ràng sẽ phải làm gì:

Hi vọng điêu nay co ich?

PS Một điều tôi thấy hơi thất vọng và địa chỉ câu hỏi của bạn là tỷ lệ phần trăm các plugin được thiết kế chỉ dành cho người dùng cuối, tức là không có móc nối của riêng họ. Hãy tưởng tượng nếu WordPress được thiết kế giống như hầu hết các plugin? Nó sẽ không linh hoạt và là một giải pháp rất thích hợp.

Có lẽ mọi thứ sẽ khác nếu WordPress có khả năng tự động cài đặt các plugin mà các plugin khác phụ thuộc vào? Vì tôi thường phải viết rất nhiều chức năng tôi cần từ đầu vì khách hàng muốn mọi thứ theo một cách nhất định và các plugin có sẵn, trong khi 90% ở đó không cho phép tôi linh hoạt cập nhật 10% còn lại.

Tôi thực sự mong muốn những người dẫn đầu cộng đồng WordPress sẽ xác định một cách để đảm bảo rằng các plugin được khen thưởng khi tuân theo các thực tiễn tốt nhất (như thêm móc nối cho các nhà phát triển khác) giống như các câu trả lời tốt được thưởng trên trang web StackExchange.


2

Chúng ta chỉ cần cố gắng trở thành nhà phát triển plugin tốt hơn để tất cả chúng ta có thể chơi tốt cùng nhau?

Để bắt đầu, có.

Là giải pháp thực sự duy nhất để yêu cầu tác giả đưa vào các móc tùy chỉnh để các nhà phát triển khác có thể xây dựng công việc của họ?

Đó sẽ là một giải pháp tốt.

Bạn cũng có thể sao chép các plugin khác và chỉ cần thêm bất kỳ thay đổi nào, mặc dù điều đó sẽ rắc rối hơn.


2

Tôi nghĩ rằng bạn trả lời câu hỏi của bạn trong câu hỏi, để nó trở nên hơi khoa trương.

Rõ ràng là bạn đang nói về một hệ thống tương tự như một hệ thống mà Google khuyến khích với Android và hệ thống Intent, rằng một ứng dụng có thể xuất bản các hành động mà nó có khả năng thực hiện thay mặt cho các ứng dụng khác, sau đó có thể nối vào chúng và truyền lại dữ liệu và ra Cá nhân tôi nghĩ rằng đó là thứ mà chúng tôi cần hướng tới như những nhà phát triển giỏi - chúng tôi sử dụng WordPress vì nó đã tuyệt vời, đủ tuyệt vời để đưa ra quyết định về việc sử dụng nó hay phát triển một sản phẩm nội bộ tương tự khá dễ dàng trong hầu hết các trường hợp. Bản thân kho lưu trữ plugin lại là một thứ tương tự, chủ yếu là người dùng cuối + nhà phát triển - tại sao lại phát triển plugin twitter khi có một plugin hoàn toàn tốt.

Điều tương tự 'tại sao phát triển các bản sao' là mấu chốt của câu hỏi của bạn ở đây. Hệ thống Android Intent cho phép các ứng dụng sử dụng các chức năng đã được tạo và truyền dữ liệu giữa chúng và điều này rất phổ biến và thường được sử dụng, vì nó được đẩy rất nhiều. Có một hệ thống tương tự đã được triển khai trong WordPress, nhưng rất hiếm khi được sử dụng ngoài các móc có trong mã lõi, được sử dụng rất nhiều.

Nó sẽ có lợi cho cộng đồng nếu có thêm nhiều hook trong các plugin tùy chỉnh, nhưng như bạn nói, không có cách nào dễ dàng để thêm hook vào khi nào / nơi bạn cần chúng.

Về phần plugin Twitter mà bạn muốn kết nối, gửi email cho tác giả, tôi chắc chắn anh ấy sẽ rất vui khi thêm chúng vào cho bạn.

Nếu có một nơi mà bạn nghĩ sẽ là một nơi tốt để đặt một cái móc vào plugin của bạn, hãy làm điều đó và ghi chép lại thật tốt. Nếu nhiều người bắt đầu đưa hook vào plugin, hoặc có một sự thúc đẩy chung hướng tới việc đó, điều đó sẽ xảy ra cuối cùng.

Vì vậy, để trả lời câu hỏi kết thúc của bạn về:

Chúng ta chỉ cần cố gắng và trở thành nhà phát triển plugin tốt hơn để tất cả chúng ta có thể chơi tốt cùng nhau?

Đúng.


Chỉnh sửa: Tôi đã nghĩ thêm về câu hỏi thực tế và cách tốt nhất để thực hiện các hook, bạn không thể thêm một hành động sẽ chạy nếu có chức năng cụ thể mà bạn đang cố gắng chạy plugin?


Điều đó sẽ hoạt động, nhưng nếu chức năng của một plugin khác có cùng tên thì sao?
Arlen Beiler

Rất tiếc, có thể là không, bởi vì bạn phải biết những gì đang được chuyển tiếp và bởi ai. Kiểm tra chức năng là một giải pháp thời gian chạy, cái chúng ta cần là một giải pháp thời gian thực, một giải pháp chạy khi hàm được đề cập được gọi hoặc trả về dữ liệu.
Arlen Beiler

@Arlen - Giả sử bạn đã tạo chức năng của riêng mình để kiểm tra xem chức năng cụ thể có ở đó không. Nó sẽ được chạy sau 'plugins_loaded', và nếu có, nó sẽ thiết lập một boolean cho phép các tính năng. Nó phụ thuộc rất nhiều vào mã không thay đổi, nhưng tôi không thể hiểu tại sao nó không hoạt động?
không ai vào

0

định nghĩa một hàm:

function my_footer() {
    do_action('my_footer');
}

bây giờ bạn có thể móc vào cái móc này: add_action('my_footer', 'example_function', 1);# thêm thông tin xem trên bài viết của tôi .


không => bây giờ, cái này riêng => cái này. Chính xác?
Arlen Beiler

Tôi hiểu cách thêm móc tùy chỉnh - câu hỏi là làm thế nào để loại bỏ plugin của người khác, lý tưởng nhất là theo cách không yêu cầu sửa đổi trực tiếp plugin của họ.
Ryan Elkins

@Arlen: cảm ơn rất nhiều, xin lỗi vì tiếng anh không tốt của tôi @Ryan: không thể, khi không có plugin hook; nhưng bạn có thể kiểm tra thay thế chức năng hoặc lớp, khi tác giả yêu cầu điều này trong plugin của mình. Nhưng có thể yêu cầu các plugin hoạt động và hook trước đó trong WP như các plugin khác và thay thế chức năng của anh ta.
bueltge
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.