Apply_filters (…) thực sự làm gì trong WordPress?


123

Tôi đang cố gắng hiểu một số chức năng trong WordPress, nhưng tôi không thể hiểu được những gì apply_filters (...) thực sự làm.

Có ai đó có thể làm rõ điều này cho tôi với một vài ví dụ không?



Một lưu ý rằng apply_filters()là một cái tên vô cùng gây hiểu lầm cho các chức năng vì nó áp dụng cho cả bộ lọc hành động nối vào chức năng mục tiêu
cameronjonesweb

@NabilKadimi, gợi ý tuyệt vời, dev.themeblvd.com/tutorial/filters/#highlighter_604585 , nhưng khi hàm này không chấp nhận bất kỳ đối số nào (vui lòng nhấp vào liên kết để xem hàm nào tôi đang nói đến), biến $ output bị thay đổi như thế nào , như anh ấy mô tả trong phần mã tiếp theo của mình?
Ramesh Pareek

@RameshPareek Liên kết của bạn dường như không hoạt động như mong đợi, vui lòng sử dụng ý chính trên Github.
Nabil Kadimi

lấy làm tiếc! Vui lòng cuộn xuống Ví dụ 1: Khái niệm cơ bản trên trang đó.
Ramesh Pareek

Câu trả lời:


104

apply_filters($tag, $value)chuyển đối số 'giá trị' cho mỗi hàm 'được nối' (sử dụng add_filter) vào 'thẻ' bộ lọc được chỉ định. Mỗi hàm thực hiện một số xử lý trên giá trị và trả về một giá trị đã sửa đổi để chuyển cho hàm tiếp theo trong chuỗi.

Ví dụ: theo mặc định (trong WordPress 2.9), the_contentbộ lọc chuyển giá trị qua chuỗi hàm sau:

  • wptexturize
  • convert_smilies
  • convert_chars
  • wpautop
  • shortcode_unautop
  • prepend_attachment
  • do_shortcode

Ngoài ra, hãy nhớ lặp lại bất kỳ thứ gì mà bạn không sử dụng giá trị nếu có vẻ như nó apply_filters($value)đang xóa sạch một giá trị ...
MrMesees

32

Câu trả lời muộn

Giải thích ngắn gọn

apply_filters()tương tác với global $wp_filtersmảng. Về cơ bản, nó chỉ kiểm tra mảng nếu bộ lọc hiện tại (hoặc hook) có một hành động (/ hàm gọi lại) được đính kèm và sau đó gọi nó.

Giải thích dài

Khi bạn đính kèm một lệnh gọi lại / hành động vào bộ lọc hoặc móc, thì bạn chỉ cần thêm tên gọi lại vào mảng bộ lọc chung. Khi đó, trong mã (ví dụ: mẫu, tệp lõi hoặc tệp plugin) một lệnh gọi đến do_action()hoặc apply_filters()xảy ra, thì WordPress đã tìm kiếm trong mảng và gọi lệnh gọi lại. Điều duy nhất đặc biệt hơn với bộ lọc so với hook là nó trả về giá trị (để xử lý thêm) thay vì chỉ kích hoạt callback. Tóm lại: Hook là để chèn dữ liệu, trong khi bộ lọc là để sửa đổi dữ liệu.


19

Đây là những gì tôi thu thập được, khi xem xét câu trả lời phổ biến nhất và các tài nguyên bổ sung:

  • $ tag dường như là một từ đồng nghĩa với tên của hook. (Điều đó không đặc biệt trực quan đối với tôi.)
  • the_content là một ví dụ về hook, thuộc loại "filter".
  • hook the_content bao gồm nhiều bộ lọc.
  • Bộ lọc sửa đổi dữ liệu. Về cơ bản, chúng lọc cơ sở dữ liệu, thay đổi dữ liệu trước khi người dùng xem nó.
  • Ví dụ, một cách sử dụng phổ biến của apply_filters () là áp dụng các bộ lọc the_content cho $ content. Trong trường hợp này, trả về gấp đôi sẽ chuyển đổi thành <p>thẻ, mặt cười sẽ chuyển thành biểu tượng, v.v.
  • "the_content" là một hook, trong khi "the_content ()" là một hàm.

1

Theo thuật ngữ cơ bản nhất, apply_filters được sử dụng để khởi tạo một hook bộ lọc ... add_filter chỉ định một chức năng mới cho các hook đã được tạo.


3
Xin lỗi, đây là cách gọi sai: apply_filters () gọi các móc lọc đã được khởi tạo và add_filter () là lệnh gọi tạo móc lọc. Tôi biết bạn thực sự muốn nói điều này, nhưng bạn có các chức năng xung quanh sai cách!
Brian C

apply_filters ($ tag, $ value); cho phép bạn tạo một vị trí trong mã của mình, nơi bạn có thể cho phép nối và sửa đổi giá trị $ mà bạn chuyển vào bằng cách sử dụng add_filter ();
Styledev
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.