Bao nhiêu lần tôi có thể móc vào cùng một hành động?


8

Tôi có một chủ đề bao gồm một số thiết lập, sử dụng after_setup_themenhưng tôi muốn viết các chức năng của riêng mình cũng cần chạy after_setup_theme. Tôi muốn giữ công cụ của tôi trong một tập tin riêng biệt. Tôi có thể gọi after_setup_themenhiều lần không?

Câu trả lời:


26

Các móc WordPress hoạt động giống như Hollywood: bạn không gọi cho họ, họ gọi bạn. Nhưng không giống như Hollywood, họ liên tục gọi tất cả mọi người trong danh sách.

Việc một hành động hoặc bộ lọc có nhiều chức năng được nối với nó là bình thường, từ các plugin khác nhau hoặc thậm chí chỉ các chức năng khác nhau trong lõi WordPress mà tất cả đều làm một cái gì đó cụ thể . Không chỉ có thể, mà ngay cả thực tiễn tốt, vì điều đó có nghĩa là mã của bạn trở nên rõ ràng hơn (mỗi chức năng chỉ làm một việc) và dễ dàng hơn để vô hiệu hóa một phần chức năng cụ thể bằng cách gỡ bỏ nó.

Hãy nhớ rằng bạn cũng có thể chơi với các ưu tiên của hook: nếu bạn muốn chạy cả hai functionA()functionB()trong after_setup_theme, nhưng functionA()phải chạy trước functionB(), bạn có thể hook functionA()với mức ưu tiên mặc định 10functionB()mức độ ưu tiên 20(hoặc bất kỳ số nào khác trên 10). Những gì sẽ không hoạt động là nối một chức năng khác với một hành động trong khi hành động đó đang thực thi . Vì vậy, bạn không thể treo functionB()đến after_setup_themetừ functionA(), kêu gọi after_setup_theme. Bạn có thể gọi nó trực tiếp, nhưng bạn sẽ mất lợi ích của các móc riêng biệt.


7

Đề nghị của tôi sẽ có chức năng "chính", nếu bạn muốn, sẽ gọi tất cả các chức năng khác của bạn. Bằng cách đó bạn chỉ phải móc vào hành động đó một lần.

add_action( 'after_setup_theme', 'master_function' );
function master_function()
{
    func_a();
    func_b();
    func_c();
    func_d();
    func_e();
}
function func_a(){ /* Do something */}
function func_b(){ /* Do something */}
function func_c(){ /* Do something */}
function func_d(){ /* Do something */}
function func_e(){ /* Do something */}

Điều này có thêm lợi ích là có thể trả về các giá trị mà bạn có thể sử dụng trong các cuộc gọi chức năng tiếp theo.


4

Có, bạn có thể thêm nhiều hành động vào hook như bạn muốn. Hãy thử nó.

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.