Câu trả lời:
Nói chung: Có, hãy đợi một hook chuyên dụng để bắt đầu mã của riêng bạn. Không bao giờ chỉ ném một đối tượng vào không gian tên toàn cầu. Nhưng init
hiếm khi cần thiết.
Bạn móc vào càng muộn càng tốt. Nếu mã đầu tiên của bạn chạy wp_head
không sử dụng hook trước đó. Bạn thậm chí có thể móc tầng :
add_action( 'wp_head', 'first_callback' );
function first_callback()
{
// do something
// then
add_action( 'wp_footer', 'second_callback' );
}
Về init
móc: Sử dụng wp_loaded
thay thế. Điều đó chạy sau init
và sau ms_site_check()
được gọi. Bằng cách này, bạn tránh chạy plugin của mình trên một trang con không hợp lệ trong bản cài đặt nhiều trang. Mọi thứ khác là như nhau.
Tôi không thấy những lợi ích lớn của thực hành này, vì những lý do sau:
Các hàm add_action
và add_filter
chỉ thêm một mục vào biến toàn cục $wp_filter
chứa tất cả các bộ lọc và hành động. Xem nguồn . Nó không gọi chức năng của bạn. Mã của bạn sẽ chỉ chạy khi do_action
và apply_filters
được gọi (với tên hook thích hợp), xảy ra rất muộn ở nơi mà các hook đó phải ở.
Bạn có thể nói rằng làm như vậy sẽ làm cho biến toàn cục $wp_filter
trở nên lớn hơn => cần thêm bộ nhớ. Nhưng tôi nghĩ việc tạo ra một chức năng mới có cùng một vấn đề.
Đặt mọi thứ vào một chức năng buộc bạn phải nhớ tất cả các hook trong mỗi tệp trong theme / plugin của bạn. Bạn sẽ không làm điều gì đó như thế này:
header.php
: thêm các hàm hook và hàm gọi lại cho những thứ xảy ra trong tiêu đề (như menu, tập lệnh đăng ký)content.php
: thêm hàm hook và hàm gọi lại để lọc nội dungadmin-menu.php
: thêm móc và chức năng gọi lại để thêm menu quản trị(giả sử rằng các tệp đó được đặt trong chủ đề / plugin của bạn)
Thay vào đó, bạn phải:
header.php
, content.php
,admin-menu.php
=> Điều đó sẽ khiến bạn khó biết điều gì xảy ra khi bạn xem nội dung của header.php
tệp. Bạn phải tìm kiếm để biết khi nào các cuộc gọi lại được thực hiện.
Và suy nghĩ về tình huống khi bạn có nhiều lớp trong chủ đề / plugin của bạn. Bạn có đặt tất cả các hook của tất cả các lớp ở một nơi không? Hay mỗi lớp có một hàm bao bọc chứa tất cả các hook? Quá dư thừa!
Trên những lý do này, tôi nghĩ đó là phong cách cá nhân :). Tôi thấy một số khuôn khổ như Hybrid làm những gì bạn nói. Đôi khi nó làm cho tôi khó đào trong những khuôn khổ đó!
wp_loaded
và thông tin MS.