apply_filters (…) ทำอะไรใน WordPress ได้จริง?


123

ฉันกำลังพยายามทำความเข้าใจฟังก์ชันบางอย่างใน WordPress แต่ฉันไม่สามารถเข้าใจได้ว่าapply_filters (... )ทำอะไรได้บ้าง

มีใครสามารถเคลียร์เรื่องนี้ให้ฉันด้วยตัวอย่างบางส่วนได้ไหม



หมายเหตุที่apply_filters()เป็นชื่อที่ทำให้เข้าใจผิดอย่างไม่น่าเชื่อสำหรับฟังก์ชันนี้เนื่องจากใช้ทั้งตัวกรองและการกระทำที่เชื่อม
โยง

@NabilKadimi ข้อเสนอแนะที่ดีdev.themeblvd.com/tutorial/filters/#highlighter_604585แต่เมื่อฟังก์ชันนี้ไม่ยอมรับข้อโต้แย้งใด ๆ (โปรดคลิกลิงก์เพื่อดูว่าฉันกำลังพูดถึงฟังก์ชันใด) ตัวแปร $ output มีการเปลี่ยนแปลงอย่างไร ตามที่เขาอธิบายในส่วนรหัสถัดไปของเขา?
Ramesh Pareek

@RameshPareek ลิงก์ของคุณดูเหมือนจะไม่ทำงานตามที่คาดไว้โปรดใช้ส่วนสำคัญ Github
Nabil Kadimi

ขออภัย! โปรดเลื่อนลงไปที่ตัวอย่างที่ 1: พื้นฐานในหน้านั้น
Ramesh Pareek

คำตอบ:


104

apply_filters($tag, $value)ส่งผ่านอาร์กิวเมนต์ 'value' ไปยังแต่ละฟังก์ชัน 'hooked' (using add_filter) ไปยัง 'tag' ตัวกรองที่ระบุ แต่ละฟังก์ชันจะดำเนินการประมวลผลค่าบางอย่างและส่งกลับค่าที่แก้ไขเพื่อส่งต่อไปยังฟังก์ชันถัดไปในลำดับ

ตัวอย่างเช่นโดยค่าเริ่มต้น (ใน WordPress 2.9) the_contentตัวกรองจะส่งผ่านค่าตามลำดับของฟังก์ชันต่อไปนี้:

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

อย่าลืมสะท้อนสิ่งที่คุณไม่ได้ใช้ค่าหากดูเหมือนว่าapply_filters($value)กำลังลบค่า ...
MrMesees

32

ตอบช้า

คำอธิบายสั้น ๆ

apply_filters()โต้ตอบกับglobal $wp_filtersอาร์เรย์ โดยทั่วไปจะตรวจสอบอาร์เรย์ว่าตัวกรองปัจจุบัน (หรือ hook) มีการดำเนินการ (/ ฟังก์ชันเรียกกลับ) ที่แนบมาแล้วเรียกใช้

คำอธิบายยาว ๆ

เมื่อคุณแนบคำเรียกกลับ / การดำเนินการเข้ากับตัวกรองหรือเบ็ดคุณก็แค่เพิ่มชื่อเรียกกลับในอาร์เรย์ตัวกรองส่วนกลาง จากนั้นในรหัส (เช่นเทมเพลตคอร์หรือไฟล์ปลั๊กอิน) มีการเรียกdo_action()หรือapply_filters()เกิดขึ้นจากนั้น WordPress จะค้นหาผ่านอาร์เรย์และเรียกการโทรกลับ สิ่งเดียวที่พิเศษกว่าของฟิลเตอร์กับ hooks คือการส่งคืนค่า (สำหรับการจัดการเพิ่มเติม) แทนที่จะเพียงแค่ยิงการเรียกกลับ สรุปได้ดังนี้: Hooks คือการแทรกข้อมูลในขณะที่ตัวกรองจะแก้ไขข้อมูล


19

นี่คือสิ่งที่ฉันรวบรวมเมื่อพิจารณาคำตอบยอดนิยมและแหล่งข้อมูลเพิ่มเติม:

  • $ tag น่าจะเป็นคำพ้องความหมายของชื่อเบ็ด (นั่นไม่ง่ายสำหรับฉันโดยเฉพาะ)
  • the_content เป็นตัวอย่างของ hook ประเภท "filter"
  • the_content hook ประกอบด้วยตัวกรองหลายตัว
  • ตัวกรองแก้ไขข้อมูล โดยพื้นฐานแล้วพวกเขาจะกรองฐานข้อมูลโดยเปลี่ยนข้อมูลก่อนที่ผู้ใช้จะดู
  • การใช้งานทั่วไปของ apply_filters () คือการใช้ตัวกรอง _content กับ $ content ในกรณีนี้ผลตอบแทนสองเท่าจะแปลงเป็น<p>แท็กใบหน้าที่ยิ้มจะเปลี่ยนเป็นไอคอนเป็นต้น
  • "the_content" เป็นตะขอในขณะที่ "the_content ()" เป็นฟังก์ชัน

1

ในแง่พื้นฐานที่สุด apply_filters ใช้เพื่อเริ่มต้นตัวกรอง hook ... add_filter กำหนดฟังก์ชันใหม่ให้กับ hooks ที่สร้างไว้แล้ว


3
ขออภัยนี่เป็นวิธีที่ไม่ถูกต้อง: apply_filters () เรียกตัวกรอง hooks ที่เริ่มต้นแล้วและ add_filter () คือการเรียกที่สร้าง hook ตัวกรอง ฉันรู้ว่าคุณหมายถึงสิ่งนี้จริง ๆ แต่คุณมีหน้าที่ในทางที่ผิด!
Brian C

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