Sự khác biệt giữa add_filter và application_filters


17

Tôi đã tìm kiếm một lời giải thích phù hợp về sự khác biệt giữa add_filter()apply_filters()ở đây nhưng không thể tìm thấy một.

Bất cứ ai có thể cho tôi biết những thông tin hoặc logic để xem xét trước khi sử dụng add_filterhoặc apply_filterstrong một bối cảnh.

Điều đó làm cho việc sử dụng một mệnh lệnh và không phải là khác?

  • Có đúng không khi add_filterchỉ thêm một hàm vào hàng đợi các hàm đang chờ để được thực thi trên một biến và apply_filtersthực hiện các hàm theo thứ tự?

  • Có phải cũng đúng apply_filterskhi được gọi với một đối số (tên của hàm sẽ được chạy) sẽ thực thi hàm đó trước tất cả các hàm khác (nếu chúng tồn tại) trong hàng đợi?


2
Điều gì về các tài liệu hiện có ở đâyở đây không giải thích nó đầy đủ cho bạn?
t31os

3
Tôi nghĩ rằng đây thực sự là một câu hỏi hay. Là một dev wordpress mới, đây có thể là một khái niệm khó hiểu.
Shawn

Câu trả lời:


26

Hầu hết những điều sau đây có thể được tìm thấy trong Codex :


apply_filters

Các hàm gọi lại được gắn vào móc lọc $tagđược gọi bằng cách gọi hàm này. Hàm này có thể được sử dụng để tạo móc lọc mới bằng cách gọi hàm này với tên của móc mới được chỉ định bằng tham số thẻ $.

$value = apply_filters( $tag, $value, $var_1, $var_2, ... );

Về bản chất:
Bạn sử dụng apply_filtersđể lọc một $valuegiá trị nhất định - liên quan đến chính giá trị cũng như các biến được cung cấp tùy chọn $var_1thông qua $var_n.


add_filter

Móc một chức năng cho một hành động lọc cụ thể.

add_filter( $tag, $function_to_add, $priority, $accepted_args );

Về bản chất:
Bạn sử dụng add_filterđể móc một chức năng tùy chỉnh vào hành động bộ lọc đã cho ( $tag) mà trước đây bạn có thể đã tạo apply_filters(hoặc đó là hành động bộ lọc tích hợp hoặc xuất phát từ plugin / chủ đề của bạn).


Vì vậy, đây là một ví dụ hư cấu :

function print_initials( $name ) {

    if ( ! is_string( $name ) ) {
        return;
    }

    $fragments = explode( ' ', $name );

    /**
     * Filter wether to print initials in reverse order.
     *
     * @param bool $reverse Print initials in reverse order?
     */
    if ( apply_filters( 'reverse_initials', FALSE ) ) {
        $fragments = array_reverse( $fragments );
    }

    foreach ( $fragments as $f ) {
        echo substr( $f, 0, 1 );
    }
}

print_initials( 'Some Guy' ); // outputs: SG

add_filter( 'reverse_initials', '__return_true' );

print_initials( 'Some Guy' ); // outputs: GS

Bây giờ, nếu chúng ta chỉ gọi chức năng của mình là như vậy, thì chữ cái đầu được in từ trái sang phải bởi vì đây là những gì chúng ta định nghĩa là hành vi mặc định.

Lần thứ hai, chúng tôi nhận được các chữ cái đầu theo thứ tự ngược lại bởi vì hàm bộ lọc __return_true, được nối với hành động bộ lọc của chúng tôi, luôn trả về TRUEvà do đó làm cho các chữ cái đầu tiên được xuất từ ​​phải sang trái.


3
Đây là một câu trả lời tuyệt vời và cho thấy cách bạn có thể ghi đè các bộ lọc. Cảm ơn.
Shawn
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.