register_uninstall_hook () vs Uninstall.php - cách nào tốt hơn để xử lý tập lệnh gỡ cài đặt plugin?


7

hôm nay trong khi tìm kiếm bên trong WP Codex, tôi đã thấy hai cách để xử lý các tập lệnh gỡ cài đặt plugin (như xóa, tùy chọn, dữ liệu, bảng, v.v.). Một cách là sử dụng register_uninstall_hook()và cách khác là sử dụng đơn giản uninstall.php.

Mặc dù trang codex cung cấp rất nhiều thông tin về cả hai, nhưng nó không nói lợi thế của việc sử dụng cái này so với cái khác là gì.

Vì có rất nhiều chuyên gia WP ở đây, tôi nghĩ tôi nên hỏi câu hỏi này về tùy chọn nào là cách tốt hơn để xử lý tập lệnh gỡ cài đặt? Sử dụng register_uninstall_hook()hay uninstall.php?

Hy vọng ai đó sẽ làm rõ. Cảm ơn trước.

Câu trả lời:


5

Lợi ích của uninstall.phpvà lý do mà nó được giới thiệu là nó cho phép bạn cách ly mã gỡ cài đặt với phần còn lại của mã plugin. Điều này có nghĩa là toàn bộ plugin của bạn không phải tải khi gỡ cài đặt. Điều đó giảm thiểu khả năng plugin của bạn sẽ vô tình chạy mã trong quá trình gỡ cài đặt chỉ nhằm mục đích chạy khi plugin đang hoạt động. Tuy nhiên, nói chung, bạn không nên chạy mã tùy ý trong các tệp plugin của mình, hầu hết mọi thứ chỉ nên chạy nếu được kích hoạt bởi một hook.

Từ các tài liệu có trong cam kết ban đầu :

Plugin không nên chạy mã tùy ý bên ngoài các chức năng, khi đăng ký hook gỡ cài đặt. Để chạy bằng hook, plugin sẽ phải được đưa vào, điều đó có nghĩa là bất kỳ mã nào nằm ngoài hàm sẽ được chạy trong quá trình gỡ cài đặt. Các plugin không nên cản trở quá trình gỡ cài đặt.

Nếu plugin không thể được viết mà không chạy mã trong plugin, thì plugin sẽ tạo một tệp có tên 'Uninstall.php' trong thư mục plugin cơ sở ...

TL; DR: plugin của bạn thực sự cần được cấu trúc theo cách như vậy mà nó không phải để sử dụng unisntall.php, nhưng sử dụng nó anyway bổ sung thêm bảo vệ chống lại những thứ vô tình chạy trong khi gỡ bỏ cài đặt.

Tất nhiên, trong một số trường hợp, bạn có thể cần phải tải các phần của plugin để gỡ cài đặt đúng cách. Nhưng nếu bạn đang sử dụng uninstall.php, bao gồm các tệp đó sẽ là một quyết định có ý thức mà bạn đưa ra, do đó khó tải nhầm một số tệp của plugin chạy mã tùy ý.

Lần duy nhất tôi sử dụng register_uninstall_hook()phương thức này là trong một plugin đơn tệp rất đơn giản, trong đó tất cả các mã được gói gọn trong một lớp duy nhất.


Lưu ý rằng uninstall_plugin()sẽ chạy hook hành động pre_uninstall_plugin uninstall_{$plugin_file} [edit: uninstall_{$plugin_file}sẽ chỉ chạy nếu register_uninstall_hook()được sử dụng] bất kể bạn sử dụng phương thức nào. (Xem vé # 34569. )


Câu trả lời tuyệt vời. Trên thực tế, tôi đang làm việc với một plugin mới, nơi tôi sẽ tạo các tùy chọn và chèn dữ liệu vào các bảng wp. Vì vậy, tôi có trách nhiệm dọn dẹp cơ sở dữ liệu khi gỡ cài đặt. Vì vậy, tôi đã suy nghĩ nên sử dụng đường dẫn nào để chạy unregister_sinstall, xóa_option, v.v. Tôi nên thực hiện cách hook gỡ cài đặt hoặc cách gỡ cài đặt tệp. Nhưng sau khi đọc câu trả lời của bạn, tôi nghĩ cách gỡ cài đặt tệp sẽ là một lựa chọn tốt. Bạn nghĩ sao?
iSaumya

1
@iSaumya Có, tôi sẽ sử dụng cách gỡ cài đặt tệp, nếu đó là tôi. Cách hook gỡ cài đặt có thể phù hợp với các plugin một tệp rất đơn giản trong đó tất cả các mã được gói gọn trong một lớp. Trong mọi trường hợp khác, tôi sẽ sử dụng uninstall.phptệp.
JD

1
@iSaumya Tôi mới nhận ra rằng tôi thực sự đã sai về uninstall_{$plugin_file}cái móc chạy cho cả hai trường hợp. @the_dramatist đúng là nó chỉ chạy khi register_uninstall_hook()được sử dụng. Tuy nhiên, lưu ý rằng bất cứ điều gì muốn nối vào gỡ cài đặt plugin có lẽ nên được sử dụng pre_uninstall_pluginthay thế (thực sự chạy cho cả hai). Xem vé # 34569 . Vì vậy, tôi sẽ không làm cho nó trở thành một yếu tố quyết định trong đó bạn chọn sử dụng cái nào.
JD

1

Vâng, nó phụ thuộc vào những gì bạn muốn. register_uninstall_hook()tạo các hook và nó thực thi khi uninstallnhấp vào liên kết. Điều đó có nghĩa là nó thực sự tạo ra một cái móc sẽ được gọi khi nhấp vào liên kết gỡ cài đặt. Giả sử bạn đã phát triển một plugin và dựa trên plugin đó mà bạn muốn tạo các plugin khác và những plugin đó cần phải thực hiện thao tác gỡ cài đặt plugin dựa trên, thì hook này sẽ hữu ích. Ở đây bạn sẽ có được một cái nhìn tổng quan đầy đủ.

uninstall.phplà một trình gỡ cài đặt chung cho plugin của bạn. Nó sẽ kích hoạt khi gỡ cài đặt plugin của bạn. Nhưng nó không cung cấp bất kỳ hook theo mặc định.

Nhìn vào đây để biết thêm thông tin.


2
Bạn cũng có thể đặt hook vào Uninstall.php của bạn. Các liên kết là giống như trong câu hỏi. Bất kỳ tài liệu tham khảo cho thực hành tốt nhất của bạn?
Andy Macaulay-Brook

1
Vâng Chúng ta có thể đặt móc vào uninstall.php. Nhưng tôi nói nó không được cung cấp theo mặc định. Và để tham khảo xin vui lòng xem WordPress Plugin Development Boilerplatehoặc bất kỳ nồi hơi. Dưới đây là liên kết soạn sẵn của Tom McFarlin github.com/DevinVinson/WordPress-Plugin-Boilerplate . Và nếu bạn muốn cung cấp hook qua uninstall.php, bạn có thể làm điều đó. Nhưng như bối cảnh câu hỏi của anh, tôi thích register_uninstall_hook().
CodeMascot

1
@the_dramatist Không thể cung cấp cả hai thứ này, xem nguồn củauninstall_plugin() . Các uninstall.phptập tin sẽ được ưu tiên, và bất cứ móc gỡ bỏ cài đặt sẽ bị bỏ qua và các uninstall_{$plugin_file}hành động sẽ không bị sa thải.
JD
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.