Giải thích cho hàm application_filters và các biến của nó


16

Tôi đang tìm hiểu cách xây dựng các biểu mẫu html bằng PHP bằng cách lấy một ví dụ từ plugin "đăng ký biểu mẫu đơn giản".

Tôi đang xem mã này:

$form .= apply_filters('simplr-reg-instructions', __('Please fill out this form to sign up for this site', 'simplr-reg'));

Bạn có thể giải thích những gì đang xảy ra ở đây - chức năng này hoạt động như thế nào, tại sao lại cần 'đơn giản-reg-hướng dẫn' và 'Simplr-reg'?

Tại sao dòng này không thể đơn giản là:

$form .= 'Please fill out this form to sign up for this site' ;

Tôi đã đọc tài liệu tham khảo chức năng nhưng vẫn không thể tìm ra.

Câu trả lời:


22

Dòng đó đang sử dụng hai hàm khác nhau cần hai giải thích riêng biệt.

__ ()

Đây là một chức năng dịch. Nếu các cài đặt được thực hiện đúng, nó sẽ dịch tham số đầu tiên từ danh sách các chuỗi được dịch trước. Nếu một bản cài đặt có một tệp có bản dịch được biên dịch cho chức năng này để sử dụng, nó sẽ sử dụng nó. Tất nhiên, plugin phải đóng gói bản dịch của chính nó, do đó tham số thứ hai. simplr-regnói __()rằng bản dịch của chuỗi 'Please fill out this form to sign up for this site'phải nằm trong tệp dịch được liên kết với 'simplr-reg'(điều này được thực hiện trước đó trong plugin bằng load_plugin_textdomain()chức năng).

Hàm sau đó trả về bản dịch. Nếu không có bản dịch để trả về (ví dụ: ngôn ngữ hiện tại không có bản dịch được biên dịch, chuỗi không có bản dịch được biên dịch cho gói đó, v.v.), đầu vào ban đầu được trả về.

Vì vậy, đối với một trang web WordPress bằng tiếng Anh, __( 'This', 'simplr-reg' )có chức năng tương tự như 'This'. Để tìm hiểu thêm về l10n (Bản địa hóa), hãy đọc nó trong bộ mã:

http://codex.wordpress.org/I18n_for_WordPress_Developers

áp dụng các bộ lọc()

Chức năng này cho phép bạn lọc các giá trị được sử dụng bởi plugin khi cần. Đây là một trong những khái niệm chính cần nắm bắt như một nhà phát triển plugin. WordPress được mở rộng thông qua các hook, về cơ bản là các điểm truy cập cho phép bạn có thời gian thực hiện các hành động của plugin và / hoặc thao tác thông tin / dữ liệu mà WordPress sử dụng, v.v.

Để thao tác dữ liệu như đoạn mã bạn đã hỏi, bạn sẽ sử dụng hàm add_filter(). Đây là một ví dụ cơ bản về cách thức hoạt động của nó:

add_filter( 'simplr-reg-instructions', 'wpse16573_my_filter' );

Có lẽ bạn sẽ nhận ra đối số đầu tiên ở đó. Nó giống như cái được sử dụng ở add_filtertrên. Đây là tên móc. Đối số thứ hai là bộ lọc gọi lại. Nó phải là một cuộc gọi lại hợp lệ cho một chức năng ( đọc thêm về cuộc gọi lại ở đây ). Dòng mã đó có nội dung "Khi 'simplr-reg-instructions'hook được thực thi, hãy chạy hàm với hàm gọi lại mà tôi đã cung cấp." apply_filters()thực thi hook được tìm thấy trong đối số đầu tiên của nó, về cơ bản có nghĩa là "thực thi tất cả các chức năng đã đăng ký cho hook này." apply_filterssau đó chuyển tất cả các đối số khác (trong trường hợp này 'Please fill out this form to sign up for this site') cho các hàm trên bộ lọc đó. Vì vậy, cuộc gọi lại tôi đã sử dụng ở trên sẽ giống như thế này:

function wpse16573_my_filter( $text ){
  $text = "<strong>$text</strong>";
  return $text;
}

Có hai loại móc trong WordPress: bộ lọc (loại chúng tôi đang sử dụng ở đây) và hành động. Sự khác biệt chính giữa hai là các bộ lọc mong bạn trả lại một cái gì đó và hành động thì không. Vì vậy, đối với bộ lọc này, ví dụ của tôi ở trên thêm một số html xung quanh 'Please fill out this form to sign up for this site'và trả về nó.

Đọc thêm về hành động và móc ở đây:

http://codex.wordpress.org/Plugin_API


John, cảm ơn rất nhiều. Câu trả lời chính xác! Nhưng dường như tôi không thể tìm thấy ngay cả một dòng "add_filter ('Simplr-reg-guide', ..." trong các tệp plugin. Làm thế nào mà ứng dụng_filter có thể chạy hơn?
Ash

1
Nếu không có bộ lọc nào được thêm vào hook, nó sẽ trả về đầu vào ban đầu ngay. Bộ lọc không có cho plugin sử dụng, nó có sẵn để bạn có thể sử dụng nếu bạn cần / muốn để bạn không phải sửa đổi chính plugin.
John P Bloch

+1 Giải thích tuyệt vời - Đọc giống như tài liệu nên ;-)
Eddie B

+1 Câu trả lời tuyệt vời, chính xác là những gì tôi đang tìm kiếm, tôi đã vô cùng bối rối nhưng bây giờ mọi thứ đã quá rõ ràng;)
doz87

5

Bạn có hai chức năng khác nhau ở đây apply_filters__()

Hàm application_filters là cách WordPress cho phép bạn thay đổi / chỉnh sửa giá trị của các biến bằng cách sử dụng các hàm gọi lại của riêng bạn và add_filterhàm. nó chấp nhận nhiều đối số nhưng những đối số quan trọng là hai đối số đầu tiên:

$something = apply_filters( $tag, $value, $var ... );

Thẻ $ là tên của móc lọc được sử dụng trong add_filterví dụ:

add_filter($tag,callback_function);

$ value là giá trị thực tế bạn sẽ có thể thay đổi hoặc chỉnh sửa.

$ var là các biến mà hàm gọi lại của bạn có thể sử dụng, một hoặc nhiều.

__() chức năng được sử dụng để dịch:

__($message,$text_domain);

$ message là thông điệp thực tế cần dịch.

$ text_domain là thẻ tên miền văn bản được sử dụng để tải plugin hoặc dịch chủ đề với load_plugin_textdomain()

Những gì nó làm?

Nó tìm kiếm mô đun bản địa hóa để dịch bản tin $ và chuyển bản dịch sang câu lệnh trả về PHP. Nếu không tìm thấy bản dịch cho $ message, nó chỉ trả về $ message.

Vì vậy, bây giờ hai hàm trong trường hợp của bạn hoạt động theo cùng một cách, application_filters sẽ gửi bất kỳ hàm gọi lại nào được liên kết với simplr-reg-instructionsbộ lọc móc giá trị đã dịch (nếu tồn tại) của 'Vui lòng điền vào biểu mẫu này để đăng ký trang web này' bằng cách sử dụng văn bản- miền củasimplr-reg


Bai Internet, cảm ơn rất nhiều! Làm thế nào mà tôi không thể tìm thấy bất kỳ dòng "add_filter ('Simplr-reg-guide'," nào trong các tệp plugin?
Ash

Đó là một cái móc trái dành cho các nhà phát triển muốn mở rộng hoặc lọc chức năng bổ trợ.
BaiNET

Vì vậy, add_filter không được mong đợi ở đây? Tôi không hiểu tại sao. Không nên áp dụng_filters chạy tất cả các hàm được liên kết với hook của nó bởi các hàm add_filter?
Tro

apply_filterslà một trình giữ chỗ cho phép bạn sử dụng các hàm riêng của mình bằng cách sử dụng add_filter, do đó, không có add_filter nào được mong đợi trừ khi bạn tự thêm chức năng của riêng mình
BaiNET
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.