Chèn phần tử mới vào mảng với add_filter


8
add_filter('example_filter', function(){ return array( 'tax1' ); } );
add_filter('example_filter', function(){ return array( 'tax2' ); } );
add_filter('example_filter', function(){ return array( 'tax3' ); } );

print_r( apply_filters( 'example_filter', array()) );

Kết quả là

Array ( [0] => tax3 ) 

Tôi không thể tìm ra làm thế nào tôi có thể chèn phần tử mới vào mảng này bằng add_filter. Cách thích hợp là gì?

Câu trả lời:


12

Các bộ lọc hoạt động bằng cách gọi từng hàm gọi lại được nối (theo thứ tự ưu tiên). Giá trị được lọc được chuyển đến chức năng gọi lại đầu tiên. Giá trị được trả về của hàm gọi lại đó sau đó được chuyển sang hàm gọi lại thứ hai và giá trị được trả về từ đó được chuyển sang thứ ba, v.v., cho đến khi tất cả các hàm gọi lại được nối đã được kích hoạt. Giá trị được trả về cuối cùng là gì (tức là giá trị được lọc đã đi qua tất cả các cuộc gọi lại) sau đó được coi là giá trị sau khi bộ lọc được áp dụng.

Trong ví dụ trên, mỗi bộ lọc đang bỏ qua những gì được truyền cho nó và thay vào đó chỉ trả về mảng mới của chính nó.

( Lưu ý bên: tránh các chức năng ẩn danh dưới dạng gọi lại)

Thử:

add_filter('example_filter', 'my_example_filter_1' );
function my_example_filter_1( $array ){
    $array[]='tax1';
    return $array;
}
add_filter('example_filter', 'my_example_filter_2' );
function my_example_filter_2( $array ){
    $array[]='tax2';
    return $array;
}
add_filter('example_filter', 'my_example_filter_3' );
function my_example_filter_3( $array ){
    $array[]='tax3';
    return $array;
}

print_r( apply_filters( 'example_filter', array()) );

Có lý do chính đáng nào để không sử dụng các hàm ẩn danh cho các bộ lọc nếu bạn không cần sử dụng remove_filter và nếu bạn không cần phải gọi lại chức năng đó?
Ünsal Korkmaz

1
Vâng, thực tế tốt là không sử dụng chúng vì 1. Cải thiện khả năng đọc. 2. Mã mở rộng. 3. Chúng không được hỗ trợ trong PHP 5.2. Và không có lợi ích để sử dụng các chức năng ẩn danh.
Stephen Harris
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.