Sự khác biệt giữa do_action và add_action


20

Câu hỏi này có thể sai, tôi không chắc về nó. Bởi vì tôi không rõ ràng về điều này.

Tôi biết add_actionnó được sử dụng để móc chức năng của chúng tôi với chức năng được chỉ định. Ví dụ add_action('wp_head'.'myfunc');bây giờ những gì từng mã myfuncsẽ được thực thi trong wp_head(). Điều này là rõ ràng nhưng tôi đang nghi ngờ về do_actionnhững gì nó làm?

Tôi nghĩ rằng nó được sử dụng để tạo ra hook riêng của chúng tôi giống như hook đã có sẵn (wp_head, wp_footer, .. vv) Nếu tôi đúng, ai đó có thể chỉ cho tôi một câu trả lời dễ hiểu với ví dụ đơn giản.

Tôi đã thử sự khác biệt trong internet nhưng tất cả đều chỉ ra sự khác biệt giữa add_action và add_filter. Tôi không muốn đến đó vì trước tiên tôi muốn làm rõ điều này và sau đó tôi sẽ chuyển đến đó.

Ai có thể giúp tôi?

EDIT sau câu hỏi POST

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');

add_action('custom','custom_register');

Tôi đã thử điều này trong plugin nhưng tôi không nhận được thông báo cảnh báo.

Nhưng khi tôi kết nối cùng chức năng wp_headthì nó hoạt động tốt

/******************working****************/
add_action('wp_head','custom_register');

Điều gì xảy ra khi bạn gọi do_action('custom'); sau khi bạn đăng ký gọi lại? Và chắc chắn rằng jQuery đã được tải.
fuxia

tôi đã không nhận được thông báo cảnh báo ở mặt sau hoặc mặt trước
mặt trời

jQuery được tải. Khi tôi kết nối chức năng tương tự với wp_headnó hoạt động tốt nhưng không hoạt động vớicustom
mặt trời

Sun, tôi tin rằng Câu hỏi ban đầu của bạn đã được trả lời bởi toscho và bạn nên đánh dấu câu này là đã được giải quyết. Các chỉnh sửa # 3 và # 4 mà bạn đã thực hiện thuộc về Câu hỏi mới .
brasofilo

Câu trả lời:


13

Sử dụng do_action( 'unique_name' )để tạo hành động của riêng bạn.

Bạn có thể sử dụng điều đó để cung cấp API cho plugin của mình , vì vậy các plugin khác có thể đăng ký gọi lại cho hành động tùy chỉnh của bạn. Ví dụ: Tôi có cần gọi do_action trong plugin của mình không?

Nhưng bạn cũng có thể sử dụng các hành động tùy chỉnh (hoặc bộ lọc) trong một chủ đề. Ví dụ: Cách thực hành tốt nhất để triển khai các phần tùy chỉnh thành chủ đề WordPress

Và bạn có thể kết hợp cả hai để tạo một plugin và một chủ đề làm việc cùng nhau. Ví dụ: Làm thế nào để làm cho phương thức từ plugin có sẵn trong chủ đề?

Tóm tắt: add_action( 'foo' )đăng ký một cuộc gọi lại, do_action( 'foo' )thực hiện cuộc gọi lại đã đăng ký.


Cảm ơn sự giúp đỡ tôi đã nhận được điều này chủ yếu là cho mục đích API. Tôi đã thử một mẫu nhưng nó không thành công. Bạn có thấy vấn đề gì ở đó không? Kiểm tra EDIT của tôi @toscho
mặt trời

Chúng ta có thể nói điều này như một trường hợp khác như thừa kế? trong khi mở rộng và ghi đè lên lớp chúng ta sẽ đi theo cách này. Điều này có đúng không?
mặt trời

@sun Hừ, vâng, nhưng bạn có thể kết hợp cả hai cách tiếp cận , chúng không loại trừ lẫn nhau.
fuxia

1

Đây là dự đoán của tôi, vì vậy nếu bạn biết rõ hơn, vui lòng đưa ra nhận xét để tôi có thể cập nhật dự đoán của mình.

Mã plugin của bạn được thực thi trước wp_head()đó (mà chúng tôi có thể giả sử sẽ gọi các hành động được thêm vào nó). Khi bạn add_action('wp_head','custom_register'), bạn đang nói với PHP rằng khi nào (trong tương lai) do_action('wp_head')được gọi, cũng sẽ gọi custom_register(). Điều tương tự cũng đúng với cuộc gọi của bạn add_action('custom','custom_register')nhưng như bạn thấy trong mã của mình, cuộc gọi đến do_action('custom')đã được thực hiện và khi nó được gọi, không có (chưa) bất kỳ hành động nào được thêm vào nó. Đây là lý do tại sao Toscho hỏi điều gì xảy ra khi bạn gọi do_action('custom') sau khi bạn đăng ký gọi lại. Câu trả lời của bạn về back end và front end là mơ hồ. Nếu bạn trao đổi hai dòng cuối cùng trong đoạn mã sau, tôi nghĩ nó sẽ hoạt động:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');                    // This is called before it will have an effect.

add_action('custom','custom_register'); // Too late - do_action was already called.

0

do_action: Đăng ký hook hành động trong khi add_action: thêm chức năng gọi lại vào hook đã đăng ký.

Thí dụ

Xem xét bạn muốn in một cái gì đó trước khi thanh bên trong mẫu của bạn.

  1. Bạn sẽ thêm một hook hành động trong tệp mẫu của bạn index.phpthông qua <?php add_action('bp_sidebar_left'); ?>.
  2. Bây giờ trong functions.phptệp của bạn, bạn có thể thêm chức năng gọi lại vào móc đó để in thứ bạn muốn.

add_action('bp_sidebar_left', 'bp_sidebar_left_cb'); function bp_sidebar_left_cb() { echo 'Hello World !'; }


-1

Bạn phải sử dụng như dưới đây:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
.

add_action('custom','custom_register'); // Too late - do_action was already called. 
do_action('custom');                    // This is called before it will have an effect

Nó hoạt động với tôi
user112289
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.