ใช้ประโยชน์จากพลังของ WordPress Hooks: อธิบายการดำเนินการและตัวกรอง

เผยแพร่แล้ว: 2022-07-22

เช่นเดียวกับ CMS อื่น ๆ WordPress ไม่ได้ตอบสนองทุกความต้องการของคุณเสมอไป เนื่องจากเป็นโอเพ่นซอร์ส คุณจึงสามารถแฮ็กเพื่อให้สอดคล้องกับความต้องการทางธุรกิจของคุณได้ แต่คุณสามารถใช้ตะขอของ WordPress เพื่อบรรลุเป้าหมายแทนได้ การสร้างด้วย hooks เป็นกลยุทธ์การชนะที่ช่วยให้นักพัฒนา WordPress สามารถสร้างคุณลักษณะของเว็บไซต์ได้แทบทุกอย่างเท่าที่จะจินตนาการได้

WordPress Hooks: การดำเนินการและตัวกรอง

WordPress hooks ไม่ได้เป็นเพียงเครื่องมือปรับแต่งที่มีประสิทธิภาพเท่านั้น แต่ยังเป็นวิธีที่องค์ประกอบของ WordPress โต้ตอบซึ่งกันและกัน ฟังก์ชันที่ใช้งานร่วมกันจะจัดการงานประจำหลายอย่างที่เราพิจารณาว่าเป็นส่วนหนึ่งของ WordPress เช่น การเพิ่มสไตล์หรือสคริปต์ลงในหน้า หรือข้อความส่วนท้ายโดยรอบที่มีองค์ประกอบ HTML การค้นหา codebase ของ WordPress Core เผยให้เห็น hooks นับพันในกว่า 700 แห่ง ธีมและปลั๊กอินของ WordPress มีตะขอมากขึ้น

ก่อนที่เราจะกระโดดลงไปใน hooks และสำรวจความแตกต่างระหว่าง action hook และ filter hooks มาทำความเข้าใจกันดีกว่าว่าส่วนไหนเหมาะสมในสถาปัตยกรรมของ WordPress

โครงสร้างพื้นฐาน WordPress

องค์ประกอบโมดูลาร์ของ WordPress สามารถผสานรวมเข้าด้วยกันได้อย่างง่ายดาย ดังนั้นเราจึงสามารถผสม จับคู่ และรวมเข้าด้วยกันได้อย่างง่ายดาย:

  1. WordPress Core: ไฟล์เหล่านี้เป็นไฟล์ที่จำเป็นสำหรับ WordPress ในการทำงาน WordPress Core มีสถาปัตยกรรมทั่วไป แดชบอร์ดผู้ดูแลระบบ WP การสืบค้นฐานข้อมูล ความปลอดภัย และอื่นๆ WordPress Core เขียนด้วย PHP และใช้ฐานข้อมูล MySQL
  2. ธีม (หรือธีมหลัก): ธีมกำหนดรูปแบบพื้นฐานและการออกแบบของเว็บไซต์ ขับเคลื่อนโดยไฟล์ PHP, HTML, JavaScript และ CSS ธีมทำงานโดยการอ่านฐานข้อมูล WordPress MySQL เพื่อสร้างโค้ด HTML ที่แสดงผลในเบราว์เซอร์ ตะขอในธีมอาจเพิ่มสไตล์ชีต สคริปต์ แบบอักษร หรือประเภทโพสต์ที่กำหนดเอง เป็นต้น
  3. ธีมย่อย: เราสร้างธีมย่อยด้วยตนเองเพื่อปรับแต่งเลย์เอาต์และการออกแบบพื้นฐานที่ธีมหลักมีให้ ธีมย่อยสามารถกำหนดสไตล์ชีตและสคริปต์เพื่อแก้ไขคุณสมบัติที่สืบทอดมา หรือเพิ่มหรือลบประเภทโพสต์ คำแนะนำธีมลูกจะแทนที่คำแนะนำของธีมหลักเสมอ
  4. ปลั๊กอิน: เพื่อขยายฟังก์ชันการทำงานของแบ็คเอนด์ของ WordPress เราสามารถเลือกปลั๊กอินของบุคคลที่สามได้หลายพันตัว Hooks ในปลั๊กอินสามารถแจ้งให้เราทราบทางอีเมลเมื่อมีการเผยแพร่โพสต์หรือซ่อนความคิดเห็นที่ผู้ใช้ส่งมาซึ่งมีภาษาที่ถูกแบน
  5. ปลั๊กอินที่กำหนดเอง: เมื่อปลั๊กอินของบุคคลที่สามไม่สามารถตอบสนองความต้องการทางธุรกิจได้อย่างเต็มที่ เราสามารถเร่งพลังให้ปลั๊กอินได้โดยการเขียนปลั๊กอินที่กำหนดเองใน PHP หรือเราสามารถเขียนปลั๊กอินใหม่ตั้งแต่ต้น ในทั้งสองกรณี เราจะเพิ่มเบ็ดเพื่อขยายฟังก์ชันการทำงานที่มีอยู่

พีระมิดแสดง 5 ระดับจากฐานสู่บนสุด: (1) WordPress Core, (2) Theme, (3) Child Theme, (4) Plugins, (5) Custom Plugins
ลำดับชั้นโครงสร้างพื้นฐานของ WordPress

เนื่องจากเราสามารถเข้าถึงแหล่งที่มาของทั้ง 5 เลเยอร์ได้ เหตุใดจึงจำเป็นต้องใช้ hook ใน WordPress

รหัสความปลอดภัย

เพื่อให้ทันกับเทคโนโลยีที่กำลังพัฒนา ผู้มีส่วนร่วมใน WordPress Core, ธีมหลัก และปลั๊กอินมักจะปล่อยการอัปเดตเพื่อบรรเทาช่องโหว่ด้านความปลอดภัย แก้ไขข้อบกพร่อง แก้ไขความไม่เข้ากัน หรือเสนอคุณสมบัติใหม่ ตามที่ที่ปรึกษาที่มีประสบการณ์ในกรณีฉุกเฉินทราบโดยตรง ความล้มเหลวในการปรับปรุงส่วนประกอบของ WordPress ให้เป็นปัจจุบันอาจทำให้ประนีประนอมหรือปิดการใช้งานไซต์ได้

หากเราแก้ไขสำเนาของส่วนประกอบต้นทางของ WordPress ในเครื่องโดยตรง เราพบปัญหา: การอัปเดตจะเขียนทับการปรับแต่งของเรา เราจะหลีกเลี่ยงสิ่งนี้เมื่อปรับแต่ง WordPress ได้อย่างไร ผ่าน hooks ในธีมลูกและปลั๊กอินที่กำหนดเอง

การเข้ารหัสในธีมลูกของเรา

ธีมลูกคือพื้นที่ปลอดภัยที่เราสามารถปรับแต่งรูปลักษณ์ของธีมที่ติดตั้งไว้ได้ โค้ดใดๆ ที่เพิ่มที่นี่จะแทนที่โค้ดที่เปรียบเทียบได้ในพาเรนต์ โดยไม่มีความเสี่ยงที่จะถูกเขียนทับโดยการอัปเดต

เมื่อเปิดใช้งานธีมย่อย จะลิงก์ไปยังพาเรนต์ที่ปิดใช้งาน สืบทอดและแสดงคุณสมบัติของพาเรนต์ในขณะที่ยังคงไม่ได้รับผลกระทบจากการอัปเดตของพาเรนต์ เพื่อไม่ให้ตกเป็นเหยื่อของการล่อลวงให้ปรับเปลี่ยนธีม แนวทางปฏิบัติที่ดีที่สุดแนะนำว่าให้เปิดใช้งานธีมย่อยเป็นส่วนหนึ่งของการตั้งค่าของเรา

การเขียนปลั๊กอินแบบกำหนดเอง

เมื่อเปิดใช้งานปลั๊กอิน ไฟล์ functions.php จะทำงานเมื่อมีการเรียกใช้แต่ละครั้งบนเซิร์ฟเวอร์ ในทางกลับกัน WordPress จะโหลดและจัดเรียง hooks จากปลั๊กอินที่ใช้งานอยู่ทั้งหมดตามลำดับความสำคัญและดำเนินการตามลำดับ เพื่อขยายฟังก์ชันการทำงานของปลั๊กอินของบุคคลที่สาม เราสามารถเขียนปลั๊กอิน WordPress ที่กำหนดเองได้

จะวางตะขอของเราไว้ที่ใดใน WordPress

เป้าหมาย ตัวอย่าง ที่ไหน?
ธีมลูก PHP ปลั๊กอินที่กำหนดเอง PHP
การปรับเปลี่ยนโครงสร้างของเว็บเพจ การเพิ่มสไตล์ชีตที่กำหนดเองเพื่อเปลี่ยนสีและแบบอักษรขององค์ประกอบเว็บไซต์
เพื่อแก้ไขฟังก์ชันการทำงานของปลั๊กอินอื่น (เช่น สร้างปลั๊กอินเพื่อเพิ่มฟังก์ชันการทำงานของปลั๊กอินของบุคคลที่สาม) การเพิ่มหัวข้อย่อย (เช่น “ข่าวสาร”) ให้กับประเภทโพสต์ที่กำหนดเอง
เพื่อเพิ่มคุณสมบัติใหม่ที่เหนือกว่า WordPress Core การปรับเปลี่ยนเวิร์กโฟลว์ที่เกิดขึ้นเมื่อมีการเยี่ยมชมโพสต์เพื่อรวมการอัปเดตตัวนับในฐานข้อมูล

การเตรียมการก่อนดำน้ำ: คำจำกัดความ

เพื่อหลีกเลี่ยงการรวมคำศัพท์ เราจะยึดคำศัพท์นี้:

  • เบ็ด เป็นจุดที่น่าสนใจใน WordPress ที่มีการลงทะเบียนฟังก์ชันการทำงาน เราอาจเชื่อมต่อฟังก์ชันของเรากับ hooks จำนวนมากใน WordPress และส่วนประกอบหรือสร้างขึ้นเอง
    • เบ็ดการดำเนิน การเรียกใช้การดำเนินการ
    • เบ็ดกรอง ทำงานตัวกรอง
  • ฟังก์ชัน hooked คือฟังก์ชัน เรียกกลับ PHP ที่กำหนดเองซึ่งเราได้ "เชื่อมต่อ" เข้ากับตำแหน่งเบ็ดของ WordPress ประเภทที่จะใช้ขึ้นอยู่กับว่า hook มีไว้เพื่ออนุญาตให้เปลี่ยนแปลงภายนอกฟังก์ชันหรือไม่ เช่น เพิ่มไปยังผลลัพธ์ของหน้าเว็บโดยตรง ปรับเปลี่ยนฐานข้อมูล หรือการส่งอีเมล เหล่านี้เรียกว่า ผลข้างเคียง
    • ตัวกรอง (หรือ ฟังก์ชันตัวกรอง ) ควรหลีกเลี่ยงผลข้างเคียงโดยการทำงานเท่านั้น จากนั้นส่งคืนสำเนาที่แก้ไขของข้อมูลที่ส่งผ่านไปยังตัวกรองนั้น
    • ในทางตรงกันข้าม การกระทำ (หรือ ฟังก์ชันการกระทำ ) มีวัตถุประสงค์เพื่อก่อให้เกิดผลข้างเคียง มันไม่มีค่าส่งคืน

แผนภาพแสดงฟังก์ชันที่จับคู่กับตะขอที่เข้ากันได้ ตะขอตัวกรองมีฟังก์ชันตัวกรองติดอยู่ และตะขอดำเนินการมีฟังก์ชันการทำงานติดอยู่
WordPress hooks สามารถมีฟังก์ชัน callback ได้หลายแบบ แต่ฟังก์ชัน callback ทั้งหมดต้องตรงกับประเภทของ hook ที่ลงทะเบียนไว้

เมื่อคำนึงถึงความแตกต่างเหล่านี้ เราสามารถเริ่มสำรวจตะขอได้

นามธรรมและรหัสที่สะอาด

เมื่อการกระทำหรือตัวกรองถูกรวมเข้าใน hook ตามความจำเป็น เราจะบรรลุวัตถุประสงค์ของการเขียนเพียงหนึ่งฟังก์ชันต่องานและเพื่อหลีกเลี่ยงความซ้ำซ้อนของโค้ดภายในโครงการ ตัวอย่างเช่น สมมติว่าเราต้องการเพิ่มสไตล์ชีตเดียวกันในเทมเพลตหน้าสามหน้า (เก็บถาวร หน้าเดียว และโพสต์ที่กำหนดเอง) ในธีมของเรา แทนที่จะแทนที่เทมเพลตแต่ละอันในพาเรนต์ จากนั้นสร้างแต่ละเทมเพลตในธีมย่อยของเรา จากนั้นเพิ่มสไตล์ชีตให้กับส่วนหัวแต่ละส่วน เราสามารถเขียนโค้ดในฟังก์ชันเดียวและแนบไปกับ wp_head hook

การตั้งชื่อที่รอบคอบ

หลีกเลี่ยงความขัดแย้งในเชิงรุกด้วยการตั้งชื่อธีมลูกหรือปลั๊กอินที่กำหนดเองโดยเฉพาะ การมี hooks ที่มีชื่อเดียวกันในไซต์เดียวเป็นสูตรสำหรับพฤติกรรมโค้ดที่ไม่ได้ตั้งใจ แนวทางปฏิบัติที่ดีที่สุดกำหนดว่าเราเริ่มต้นชื่อของ hook ของเราด้วยคำนำหน้าสั้นๆ ที่ไม่ซ้ำกัน (เช่น ชื่อผู้แต่ง โปรเจ็กต์ หรือชื่อย่อของบริษัท) ตามด้วยชื่อ hook ที่สื่อความหมาย ตัวอย่างเช่น การใช้รูปแบบ “ชื่อย่อของโปรเจ็กต์พร้อมชื่อ hook” สำหรับปลั๊กอิน Fabulous ของโปรเจ็กต์ Tahir เราสามารถตั้งชื่อ hooks ของเราว่า tfp-upload-document หรือ tfp-create-post-news

การพัฒนาและการดีบักพร้อมกัน

เบ็ดเดียวอาจกระตุ้นการทำงานหรือตัวกรองมากกว่าหนึ่งรายการ ตัวอย่างเช่น เราสามารถเขียนหน้าเว็บที่มีสคริปต์หลายตัว ซึ่งทั้งหมดนั้นใช้ wp_head action hook เพื่อพิมพ์ HTML (เช่น ส่วน <style> หรือ <script> ) ภายในส่วน <head> ที่ส่วนหน้าของหน้า

ดังนั้น นักพัฒนาปลั๊กอินหลายคนจึงสามารถบรรลุเป้าหมายหลายเป้าหมายพร้อมกันในปลั๊กอินตัวเดียว หรือแบ่งปลั๊กอินออกเป็นหลาย ๆ ปลั๊กอินที่ง่ายกว่า หากฟีเจอร์ทำงานไม่ถูกต้อง เราสามารถตรวจสอบและแก้ไขข้อบกพร่องของฟังก์ชันที่เชื่อมต่อได้โดยตรงโดยไม่ต้องค้นหาทั้งโปรเจ็กต์

การกระทำ

การดำเนินการเรียกใช้โค้ดเมื่อมีเหตุการณ์เกิดขึ้นใน WordPress การดำเนินการสามารถดำเนินการต่างๆ เช่น:

  • การสร้างข้อมูล
  • การอ่านข้อมูล
  • การปรับเปลี่ยนข้อมูล
  • กำลังลบข้อมูล
  • การบันทึกการอนุญาตของผู้ใช้ที่เข้าสู่ระบบ
  • ติดตามตำแหน่งและเก็บไว้ในฐานข้อมูล

ตัวอย่างของเหตุการณ์ที่สามารถทริกเกอร์การดำเนินการได้ ได้แก่:

  • init หลังจากโหลด WordPress แต่ก่อนที่จะส่งส่วนหัวไปยังเอาต์พุตสตรีม
  • save_post เมื่อบันทึกโพสต์แล้ว
  • wp_create_nav_menu หลังจากสร้างเมนูนำทางสำเร็จแล้ว

การดำเนินการสามารถโต้ตอบกับ API เพื่อส่งข้อมูล (เช่น ลิงก์ไปยังโพสต์บนโซเชียลมีเดีย) แต่จะไม่ส่งคืนข้อมูลไปยัง hook การโทร

สมมติว่าเราต้องการแชร์โพสต์ใหม่ทั้งหมดบนไซต์ของเราผ่านโซเชียลมีเดียโดยอัตโนมัติ เริ่มต้นด้วยการดูเอกสารของ WordPress เพื่อหาตะขอที่สามารถเรียกใช้งานได้ทุกครั้งที่มีการเผยแพร่โพสต์

ไม่มีทางลัดในการค้นหาเบ็ด: เราจะเรียนรู้ผ่านประสบการณ์หรือเจาะลึกการกระทำที่ระบุไว้เพื่อค้นหาผู้สมัครที่มีแนวโน้ม เราอาจพิจารณา save_post ผู้สมัคร แต่ตัดออกอย่างรวดเร็ว เนื่องจากจะทริกเกอร์หลายครั้งในช่วงการแก้ไขครั้งเดียว ทางเลือกที่ดีกว่าคือ transition_post_status ซึ่งจะทริกเกอร์ก็ต่อเมื่อสถานะโพสต์เปลี่ยนไป (เช่น จาก draft เป็น publish จาก publish เป็น trash )

เราจะใช้ transition_post_status แต่จะปรับแต่งการดำเนินการของเราให้ทำงานเฉพาะเมื่อสถานะของการเปลี่ยนโพสต์ของเราเป็นการ publish นอกจากนี้ โดยการปฏิบัติตามเอกสารอย่างเป็นทางการและ API ของแพลตฟอร์มโซเชียลมีเดียต่างๆ เราสามารถรวมและเผยแพร่เนื้อหาของโพสต์ของเราพร้อมกับรูปภาพเด่น:

 <?php function publish_post_on_social_media ( $new_status = NULL, $old_status = NULL, $post_ID = NULL ) { if ( 'publish' == $new_status && 'publish' != $old_status ) { // build the logic to share on social media } } add_action( 'transition_post_status', 'publish_post_on_social_media', 10, 3 ); ?>

ตอนนี้เรารู้วิธีใช้ action hooks แล้ว มีสิ่งหนึ่งที่มีประโยชน์อย่างยิ่ง โดยเฉพาะอย่างยิ่งเมื่อพูดถึง CSS

การกำหนดลำดับความสำคัญด้วย wp_enqueue_scripts

สมมติว่าเราต้องการเพิ่มสไตล์ชีตของธีมลูกของเราเป็นครั้งสุดท้าย หลังจากที่โหลดอย่างอื่นทั้งหมดแล้ว เพื่อให้แน่ใจว่าคลาสที่มีชื่อเดียวกันซึ่งกำเนิดจากที่อื่นจะถูกแทนที่โดยคลาสของธีมย่อยของเรา

WordPress โหลดสไตล์ชีตในลำดับเริ่มต้น:

  1. ธีมของผู้ปกครอง
  2. ธีมเด็ก
  3. ปลั๊กอินใด ๆ

ในโครงสร้างนี้:

 add_action( string $hook_name, callable $callback, int $priority = 10, int $accepted_args = 1)

…ค่า priority ของการดำเนินการเพิ่มเติมจะกำหนดลำดับการดำเนินการ:

  • ค่า priority เริ่มต้นสำหรับ wp_enqueue_scripts (หรือการดำเนินการใดๆ) คือ “10”
  • ฟังก์ชันจะทำงานเร็วกว่านี้หากเรารีเซ็ต priority เป็นตัวเลขที่ต่ำกว่า
  • ฟังก์ชันจะทำงานในภายหลังหากเรารีเซ็ต priority เป็นตัวเลขที่สูงกว่า

หากต้องการโหลดสไตล์ชีตของธีมลูกของเรา ให้ใช้ wp_enqueue_scripts ซึ่งเป็นการกระทำที่มักใช้โดยธีมและปลั๊กอินของ WordPress เราต้องการเพียงเปลี่ยนลำดับความสำคัญของการกระทำของธีมลูกของเรา wp_enqueue_scripts เป็นตัวเลขที่สูงกว่าค่าเริ่มต้น "10" พูดว่า "99":

 add_action( 'wp_enqueue_scripts', 'child_theme_styles', 99 );



โดยทั่วไป เราใช้การดำเนินการเมื่อเราไม่ได้มองหาค่าที่ส่งกลับ ในการส่งคืนข้อมูลไปยัง hook การโทร เราต้องดูที่ตัวกรอง

ตัวกรอง

ตัวกรองช่วยให้เราแก้ไขข้อมูลก่อนที่จะประมวลผลเพื่อแสดงในเบราว์เซอร์ ด้วยเหตุนี้ ตัวกรองจึงยอมรับตัวแปร แก้ไขค่าที่ส่งผ่าน และส่งคืนข้อมูลเพื่อการประมวลผลต่อไป

WordPress ตรวจสอบและดำเนินการตัวกรองที่ลงทะเบียนทั้งหมดก่อนที่จะเตรียมเนื้อหาสำหรับเบราว์เซอร์ ด้วยวิธีนี้ เราสามารถจัดการข้อมูลก่อนที่จะส่งไปยังเบราว์เซอร์หรือฐานข้อมูลได้ตามความเหมาะสม

ลูกค้ารายหนึ่งของฉันปรับแต่งผลิตภัณฑ์ที่เขาขายโดยพิมพ์รูปภาพที่ลูกค้ามอบให้ ลูกค้ารายนี้ใช้ปลั๊กอิน WooCommerce เพื่อจัดการอีคอมเมิร์ซ WooCommerce ไม่รองรับฟังก์ชันนี้ตั้งแต่แกะกล่อง ดังนั้นฉันจึงเพิ่มโค้ดสองบิตใน functions.php ของลูกค้าของฉัน:

  1. woocommerce_checkout_cart_item_quantity ซึ่งระบุไว้ในเอกสารประกอบของ WooCommerce เป็นตัวกรองเบ็ดที่ช่วยให้ลูกค้าสามารถเพิ่มองค์ประกอบภายนอกลงในรถเข็นได้ก่อนที่จะชำระเงิน
  2. my_customer_image_data_in_cart เป็นตัวกรองที่เราจะเขียนเองและใช้เพื่อเรียก woocommerce_checkout_cart_item_quantity เมื่อใดก็ตามที่ WooCommerce เตรียมรถเข็นสำหรับแสดง

เมื่อใช้เทมเพลตต่อไปนี้ เราสามารถเพิ่มตัวกรองและปรับเปลี่ยนพฤติกรรมเริ่มต้นของรถเข็นได้:

 add_filter( 'woocommerce_checkout_cart_item_quantity', 'my_customer_image_data_in_cart', 1, 3 ); function my_customer_image_data_in_cart( $html, $cart_item, $cart_item_key ) { if ( !empty( $cart_item['images_data'] ) ) { // Store image // Get image URL // Modify $html } return $html; }

เราเพิ่มตัวกรองในลักษณะเดียวกับที่เราเพิ่มการกระทำ ตัวกรองทำงานเหมือนกับการดำเนินการ รวมถึงวิธีประมวลผลลำดับความสำคัญ ความแตกต่างที่สำคัญระหว่างตัวกรองและการดำเนินการคือการดำเนินการจะไม่ส่งคืนข้อมูลไปยัง hook ที่เรียก แต่ตัวกรองจะส่งกลับ

ตะขอแอคชั่นแบบกำหนดเองและตะขอกรอง

การเขียนแอคชั่น hooks แบบกำหนดเองไม่ได้ขยาย Wordpress Core แต่เพียงสร้างจุดทริกเกอร์ใหม่ภายในโค้ดของเราเอง

การสร้าง Action Hooks แบบกำหนดเอง

การเพิ่ม hook ที่กำหนดเองในธีมหรือปลั๊กอินของเราช่วยให้นักพัฒนาคนอื่นๆ สามารถขยายฟังก์ชันการทำงานโดยไม่ต้องแก้ไขฐานโค้ดของเรา ในการเพิ่ม hook ที่กำหนดเอง ให้ใช้เทคนิคเดียวกับที่ฐานโค้ด WordPress Core ใช้: ที่จุดทริกเกอร์ที่ต้องการ เราเพียงแค่เรียก do_action ด้วยชื่อของ hook ใหม่ของเรา โดยจะเพิ่มอาร์กิวเมนต์ให้มากที่สุดเท่าที่การเรียกกลับของเราอาจมีประโยชน์:

 do_action( 'myorg_hello_action', $arg1, $arg2 );

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

เมื่อเราได้กำหนด myorg_hello_action แล้ว ก็พร้อมให้นักพัฒนาเชื่อมต่อในลักษณะเดียวกับที่เราพูดถึงก่อนหน้านี้สำหรับ hooks ในตัว: Define a function แล้วเรียก add_action()

นอกเสียจากว่าเราต้องการใช้ hook ใหม่เป็นการภายในเท่านั้น ซึ่งเป็นวิธีที่มีประโยชน์ในการจัดโครงสร้างโค้ดของเรา เราจะต้องแจ้งความพร้อมใช้งานดาวน์สตรีมให้กับสมาชิกคนอื่นๆ ในทีมของเราหรือผู้ใช้ภายนอกของปลั๊กอินของเรา ผ่านเอกสารที่ชัดเจน .

การสร้างตะขอตัวกรองแบบกำหนดเอง

รูปแบบของ WordPress สำหรับ hooks ตัวกรองที่กำหนดเองนั้นเหมือนกับ action hooks ยกเว้นว่าเราเรียก apply_filters() แทน do_action()

คราวนี้มาดูตัวอย่างที่เป็นรูปธรรมมากขึ้น สมมติว่าปลั๊กอินของเราสร้างเมนูแถบด้านข้าง ซึ่งปกติประกอบด้วยสี่รายการ เราจะเพิ่ม hook ตัวกรองแบบกำหนดเองเพื่อให้เรา (และนักพัฒนาดาวน์สตรีม) สามารถแก้ไขรายการของไอเท็มที่อื่นได้:

 // Text labels of sidebar menu $sidebar_menu = array( "Page One", "Page Two", "Page Three", "Page Four" ); $sidebar_menu = apply_filters( 'myorg_sidebar_menu', $sidebar_menu );

เพียงเท่านี้ ตัวกรองแบบกำหนดเองของเรา myorg_sidebar_menu ก็พร้อมใช้งานในปลั๊กอินที่อาจโหลดได้ในภายหลังหรือที่อื่นในปลั๊กอินนี้ ซึ่งช่วยให้ทุกคนเขียนโค้ดดาวน์สตรีมเพื่อปรับแต่งแถบด้านข้างของเราได้

เราหรือนักพัฒนารายอื่นจะปฏิบัติตามรูปแบบเดียวกันเมื่อใช้เบ็ด WordPress ในตัว กล่าวอีกนัยหนึ่ง เราจะเริ่มต้นด้วยการกำหนดฟังก์ชันการโทรกลับบางฟังก์ชันที่ส่งคืนข้อมูลที่ส่งผ่านในเวอร์ชันที่แก้ไข:

 function lowercase_sidebar_menu( $menu ) { $menu = array_map( 'strtolower', $menu ); return $menu; } function add_donate_item( $menu ) { $menu = array_push( $menu, 'Donate' ); return $menu; }

เช่นเดียวกับตัวอย่างก่อนหน้านี้ ตอนนี้เราพร้อมที่จะขอฟังก์ชันการเรียกกลับตัวกรองของเรากับ hook แบบกำหนดเองของเราแล้ว:

 add_filter( 'myorg_sidebar_menu', 'add_donate_item', 100 ); add_filter( 'myorg_sidebar_menu', 'lowercase_sidebar_menu' );

ด้วยเหตุนี้ เราจึงนำตัวอย่างฟังก์ชันการโทรกลับสองตัวอย่างของเรามารวมเข้ากับตะขอตัวกรองแบบกำหนดเองของเรา ทั้งสองตอนนี้แก้ไขเนื้อหาดั้งเดิมของ $the_sidebar_menu เนื่องจากเรากำหนด priority ที่สูงกว่าให้กับ add_donate_item มันจึงทำงานในภายหลัง หลังจากที่ lowercase_sidebar_menu _sidebar_menu ดำเนินการ

สามแผงที่แสดงผลลัพธ์ของฟังก์ชันตัวกรองที่อธิบายไว้ในส่วนนี้ แผงที่ 1 แสดงแถบด้านข้างเนื่องจากไม่มีการโทรกลับในตัวกรอง แผงที่ 2 แสดงแถบด้านข้างตามที่ควรจะเป็นการโทรกลับตัวพิมพ์เล็ก_sidebar_menu ที่ติดอยู่ในตัวกรอง โดยมีชื่อรายการทั้งสี่เป็นตัวพิมพ์เล็ก แผงที่ 3 แสดงแถบด้านข้างอย่างที่ควรจะเป็นเมื่อการโทรกลับของ donate_button ยังติดอยู่ในตัวกรองด้วย---รายการตัวพิมพ์เล็กเช่นเดียวกับในแผงที่ 2 บวกกับรายการที่ห้า "บริจาค" ทิ้งไว้ในชื่อเรื่อง

นักพัฒนาดาวน์สตรีมสามารถขอฟังก์ชันการโทรกลับเพิ่มเติมกับ myorg_sidebar_menu ได้เสมอ อย่างที่พวกเขาทำ พวกเขาสามารถใช้พารามิเตอร์ priority เพื่อให้ hook ทำงานก่อน หลัง หรือระหว่างสองตัวอย่างฟังก์ชันการเรียกกลับของเรา

ท้องฟ้ามีขีดจำกัดด้วยการกระทำและตัวกรอง

ด้วยการกระทำ ตัวกรอง และตะขอ ฟังก์ชันการทำงานของ WordPress สามารถเติบโตได้แบบก้าวกระโดด เราสามารถพัฒนาคุณสมบัติที่กำหนดเองสำหรับไซต์ของเรา โดยปล่อยให้เรามีส่วนร่วมได้มากพอๆ กับ WordPress Hooks ทำให้เราปฏิบัติตามความปลอดภัยและแนวทางปฏิบัติที่ดีที่สุดในขณะที่เรานำไซต์ WordPress ของเราไปสู่อีกระดับ

บล็อก Toptal Engineering ขอขอบคุณ Fahad Murtaza สำหรับความเชี่ยวชาญ การทดสอบเบต้า และการตรวจสอบทางเทคนิคของบทความนี้