คำอธิบายสำหรับฟังก์ชั่น Apply_filters และตัวแปร


16

ฉันเรียนรู้วิธีสร้างแบบฟอร์ม html โดยใช้ PHP โดยนำตัวอย่างจากปลั๊กอิน "ลงทะเบียนแบบง่าย ๆ "

ฉันกำลังดูรหัสนี้:

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

คุณช่วยอธิบายสิ่งที่เกิดขึ้นได้ที่นี่ฟังก์ชั่นทำอะไรทำไมถึงต้องใช้คำสั่ง

เหตุใดบรรทัดนี้จึงไม่สามารถเป็นเพียง:

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

ฉันอ่านการอ้างอิงฟังก์ชั่นแล้ว แต่ยังไม่สามารถเข้าใจได้

คำตอบ:


22

บรรทัดนั้นใช้สองฟังก์ชั่นที่แตกต่างกันซึ่งต้องการคำอธิบายแยกกันสองอย่าง

__ ()

นี่คือฟังก์ชั่นการแปล หากการตั้งค่าเสร็จสิ้นจะเป็นการแปลพารามิเตอร์แรกจากรายการสตริงที่แปลล่วงหน้า หากการติดตั้งมีไฟล์ที่มีการแปลเพื่อรวบรวมฟังก์ชั่นนี้ไว้จะใช้มัน แน่นอนปลั๊กอินต้องจัดแพคเกจการแปลของตัวเองดังนั้นพารามิเตอร์ที่สอง simplr-regบอก__()ว่าการแปลของสตริง'Please fill out this form to sign up for this site'ควรอยู่ในไฟล์การแปลที่เกี่ยวข้อง'simplr-reg'(ซึ่งจะทำก่อนหน้านี้ในปลั๊กอินโดยใช้load_plugin_textdomain()ฟังก์ชั่น)

ฟังก์ชันจะคืนค่าการแปล หากไม่มีการแปลที่จะส่งคืน (เช่นภาษาปัจจุบันไม่มีการแปลที่รวบรวมสตริงจะไม่มีการแปลที่รวบรวมสำหรับแพ็คเกจนั้น ฯลฯ ) ข้อมูลต้นฉบับจะถูกส่งกลับ

ดังนั้นสำหรับเว็บไซต์ WordPress ในภาษาอังกฤษคือหน้าที่เช่นเดียวกับ__( 'This', 'simplr-reg' ) 'This'หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ l10n (การโลคัลไลเซชัน) ให้อ่านมันใน codex:

http://codex.wordpress.org/I18n_for_WordPress_Developers

apply_filters ()

ฟังก์ชันนี้ช่วยให้คุณกรองค่าที่ปลั๊กอินใช้ตามต้องการ นี่เป็นหนึ่งในแนวคิดหลักที่จะเข้าใจในฐานะนักพัฒนาปลั๊กอิน WordPress มีการขยายผ่าน hooks ซึ่งโดยทั่วไปแล้วเป็นจุดเชื่อมต่อที่อนุญาตให้คุณกำหนดเวลาดำเนินการของปลั๊กอินและ / หรือจัดการข้อมูล / ข้อมูลที่ WordPress ใช้เป็นต้น

หากต้องการจัดการข้อมูลเช่นส่วนย่อยของรหัสที่คุณถามคุณจะต้องใช้ฟังก์ชันadd_filter()นี้ นี่คือตัวอย่างพื้นฐานของการทำงาน:

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

คุณอาจจำอาร์กิวเมนต์แรกได้ เป็นแบบเดียวกับที่ใช้ในadd_filterด้านบน นี่คือชื่อเบ็ด อาร์กิวเมนต์ที่สองคือการเรียกกลับตัวกรอง ต้องเป็นฟังก์ชันการเรียกกลับที่ถูกต้อง ( อ่านเพิ่มเติมเกี่ยวกับการเรียกกลับที่นี่ ) บรรทัดของรหัสนั้นบอกว่า "เมื่อ'simplr-reg-instructions'มีการดำเนินการขอให้เรียกใช้ฟังก์ชั่นด้วยการโทรกลับที่ฉันให้ไว้" apply_filters()เรียกใช้งาน hook ที่พบในอาร์กิวเมนต์แรกโดยพื้นฐานแล้วหมายถึง "execute function ทั้งหมดที่ลงทะเบียนสำหรับ hook นี้" apply_filtersจากนั้นส่งผ่านอาร์กิวเมนต์อื่นทั้งหมด (ในกรณีนี้'Please fill out this form to sign up for this site') ไปยังฟังก์ชั่นในตัวกรองนั้น ดังนั้นการโทรกลับที่ฉันใช้ด้านบนควรมีลักษณะเช่นนี้:

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

WordPress มีสองชนิดคือ hooks: ตัวกรอง (ชนิดที่เราใช้อยู่ที่นี่) และการกระทำ ความแตกต่างที่สำคัญระหว่างทั้งสองคือตัวกรองคาดหวังว่าคุณจะส่งคืนสิ่งที่และการกระทำไม่ได้ ดังนั้นสำหรับตัวกรองนี้ตัวอย่างของฉันด้านบนจะเพิ่ม html ไปรอบ ๆ'Please fill out this form to sign up for this site'และส่งคืน

อ่านเพิ่มเติมเกี่ยวกับการกระทำและขอได้ที่นี่:

http://codex.wordpress.org/Plugin_API


จอห์นขอบคุณมาก คำตอบที่ดี! แต่ฉันไม่สามารถดูเหมือนจะพบแม้แต่คนเดียว "add_filter ( 'simplr-REG-คำแนะนำ' ..." บรรทัดในไฟล์ปลั๊กอินว่าสามารถวิ่ง apply_filter กว่า.
เถ้า

1
หากไม่มีการเพิ่มตัวกรองลงในเบ็ดก็แค่คืนค่าอินพุตดั้งเดิมกลับมาทันที ตัวกรองไม่ได้มีไว้สำหรับปลั๊กอินที่จะใช้มันมีไว้เพื่อให้คุณสามารถใช้งานได้ถ้าคุณต้องการ / ต้องการเพื่อที่คุณจะได้ไม่ต้องแก้ไขตัวปลั๊กอินเอง
John P Bloch

+1 คำอธิบายที่ยอดเยี่ยม - อ่านเช่นเดียวกับเอกสารควร ;-)
Eddie B

+1 คำตอบที่ดีสิ่งที่ฉันกำลังมองหาฉันสับสนอย่างมาก แต่ตอนนี้ทุกอย่างชัดเจนมาก)
doz87

5

คุณมีฟังก์ชั่นที่แตกต่างกันสองแบบที่นี่apply_filtersและ__()

apply_filters ฟังก์ชั่นเป็นวิธีที่ WordPress ของการให้คุณเปลี่ยน / แก้ไขค่าของตัวแปรโดยใช้ฟังก์ชั่นการโทรกลับของคุณเองและadd_filterฟังก์ชั่น ยอมรับข้อโต้แย้งมากมาย แต่สิ่งสำคัญคือสองข้อแรก:

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

$ tag เป็นชื่อของตัวกรองเบ็ดที่ใช้ในadd_filterเช่น:

add_filter($tag,callback_function);

$ value คือมูลค่าจริงที่คุณจะสามารถเปลี่ยนหรือแก้ไข

$ var คือตัวแปรที่ฟังก์ชันการโทรกลับของคุณสามารถใช้ได้อย่างน้อยหนึ่งรายการ

__() ฟังก์ชั่นใช้สำหรับการแปล:

__($message,$text_domain);

$ message เป็นข้อความจริงในการแปล

$ text_domain เป็นแท็กโดเมนข้อความที่ใช้สำหรับโหลดปลั๊กอินหรือการแปลธีมด้วย load_plugin_textdomain()

มันทำอะไร

มันค้นหาโมดูลการแปลสำหรับการแปลข้อความ $ และผ่านการแปลไปยังคำสั่งการส่งคืน PHP หากไม่พบการแปลสำหรับข้อความ $ ก็แค่ส่งกลับข้อความ $

ดังนั้นตอนนี้ทั้งสองฟังก์ชั่นในกรณีที่คุณทำงานในลักษณะเดียวกัน Apply_filters จะส่งฟังก์ชันการเรียกกลับใด ๆ ที่เกี่ยวข้องกับsimplr-reg-instructionsตัวกรองขอค่าที่แปล (ถ้ามี) ของ 'กรุณากรอกแบบฟอร์มนี้เพื่อลงทะเบียนสำหรับเว็บไซต์นี้' โดยใช้ข้อความ - โดเมนของsimplr-reg


เบนเทนเน็ตขอบคุณมาก! ฉันจะหาบรรทัด "add_filter ('simplr-reg-Instructions'," บรรทัดใด ๆ ในไฟล์ปลั๊กอินได้อย่างไร
Ash

มีตะขอเหลืออยู่สำหรับนักพัฒนาที่ต้องการขยายหรือกรองการทำงานของปลั๊กอิน
Bainternet

ดังนั้นไม่คาดว่าจะเป็น add_filter ที่นี่? ฉันไม่เข้าใจว่าทำไม ไม่ควร Apply_filters เรียกใช้ฟังก์ชั่นทั้งหมดที่เกี่ยวข้องกับตะขอของมันโดยฟังก์ชั่น add_filter?
Ash

apply_filtersเป็นตัวยึดตำแหน่งซึ่งให้คุณเชื่อมadd_filterโยงฟังก์ชั่นของคุณเองโดยใช้ดังนั้นจึงไม่คาดหวังว่าจะไม่มี add_filter นอกจากคุณจะเพิ่มของคุณเอง
Bainternet
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.