WordPress tải tập tin plugin theo thứ tự nào?


21

Các plugin được tải theo thứ tự nào trong WordPress?

Và trong thư mục của một plugin cụ thể, thứ tự nào được tuân theo để tải?


Bạn có thể gỡ lỗi rất sâu với plugin này: https://wordpress.org/plugins/whats-rucky/ Nó liệt kê tất cả các tệp cần thiết trong WordPress.
Szépe Viktor

Câu trả lời:


26

Trả lời cho câu hỏi đầu tiên:

  1. Trong wp-settings.php, WordPress trước tiên kiểm tra mọi plugin phải sử dụng (plugin trong mu-pluginsthư mục tùy chọn ) và tải những plugin đó.

  2. Sau đó, nếu bạn đang chạy cài đặt nhiều trang, nó sẽ kiểm tra các plugin được kích hoạt mạng và tải chúng.

  3. Sau đó, nó kiểm tra tất cả các plugin đang hoạt động khác bằng cách xem active_pluginsmục nhập của wp_optionsbảng cơ sở dữ liệu và lặp qua các plugin đó. Các plugin sẽ được liệt kê theo thứ tự abc.

Đây là thứ tự WordPress tải khá nhiều thứ: http://codex.wordpress.org/Action_Reference#Actions_Run_During_a_Typical_Request

Vấn đề là, thông thường, mỗi plugin riêng lẻ được tải theo thứ tự nào, bởi vì các plugin được viết đúng sẽ sử dụng các móc nối WordPress, cho phép bạn cắm chức năng vào các điểm cụ thể sau khi khởi động WordPress. (Các plugin được viết đúng cũng sẽ thêm tiền tố vào các chức năng và lớp của chúng để không xảy ra xung đột.)

Thông tin thêm về API plugin: http://codex.wordpress.org/Plugin_API/

Trả lời cho câu hỏi thứ hai:

Hoàn toàn phụ thuộc vào plugin. WordPress chỉ tải một tệp trong plugin, tệp thường được đặt tên the-plugin-name.phpvà chứa tiêu đề, mô tả, tác giả, v.v. ở đầu. Nó tùy thuộc vào các plugin để tải phần còn lại của tập tin của mình, sử dụng require_oncewp_enqueue_scriptvà không có điều gì.


Vì vậy, nếu tôi tạo một plugin, sau đó phát hành một bổ trợ bổ sung nên chạy sau khi plugin ban đầu được chạy, làm thế nào tôi có thể đảm bảo thứ tự đó?
urok93

Nó thực sự phụ thuộc vào những gì bạn đang cố gắng làm. Nhưng nhìn chung, bạn sẽ thiết lập từng cái để chạy trên một hook cụ thể bằng cách sử dụng hàm add_action (), cho phép bạn đặt mức độ ưu tiên. codex.wordpress.org/Function_Reference/add_action
SeventhSteel

@SeventhSteel Nhưng nếu một plugin dựa vào hook được tạo bởi một plugin khác. Nếu một plugin sử dụng apply_filters()để tạo một hook, nhưng chạy trước một plugin sử dụng add_filter(), thì nó vẫn hoạt động chứ? Về mặt logic, có vẻ như nó apply_filters()đã bị hủy, vì vậy các add_filter()cuộc gọi trong plugin thứ hai sẽ không làm gì cả. Có vấn đề gì theo thứ tự các plugin tải khi chỉ sử dụng các hook được tạo bởi plugin không?
trusktr

Điều quan trọng là những gì đã được tải bởi thời gian apply_filters()chạy. add_filter()phải chạy trước apply_filters(). Nếu add_filter()trong một tệp plugin và không phải trong một chức năng khác, nó sẽ chạy trên plugins_loadedhook thường xảy ra trước khi bạn cần apply_filters().
SeventhSteel

Một kịch bản phổ biến là có một số bổ sung nối thêm nội dung của chúng sau the_content- thứ tự xuất hiện của chúng được xác định như thế nào?
Dan Knauss

9

Tôi thấy rằng rất hữu ích khi bao gồm hành động 'tải muộn' trong plugin của tôi chạy sau khi tất cả các plugin đã hoàn thành tải của chúng như thế này:

add_action('plugins_loaded', 'my_late_loader');

Hàm my_late_loader sau đó được khởi tạo sau tất cả các plugin khác cho phép tôi sử dụng các hook được xác định bởi các plugin khác trong hàm my_other_factor của riêng tôi được khởi tạo trong my_late_loader

/**
 * Late loading function for actions that must run after all plugins 
 * have loaded
 */
function my_late_loader(){
    add_action( 'some_hook', 'my_other_function', 10, 1);
}

Bit phức tạp (tôi biết), nhưng điều này đảm bảo rằng các hook trong các plugin khác được tạo trước khi được thêm vào bất kể thứ tự tải plugin.

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.