ใช้ WordPress Hooks เพื่อล้างโค้ด เปิดใช้งาน & ถอนการติดตั้ง
เผยแพร่แล้ว: 2015-01-23ผู้เขียนปลั๊กอินอุทิศเวลาและพลังงานอย่างมากให้กับฟังก์ชันการทำงานหลักของผลิตภัณฑ์ของตน โดยที่พวกเขายอมให้สิ่งที่มีความสำคัญน้อยกว่าตกอยู่ริมทาง
เปิดใช้งานและปิดใช้งานตัวอย่างเช่น แม้ว่าการเปิดใช้งาน hooks จะแพร่หลาย – ปลั๊กอินจำนวนมากจำเป็นต้องเพิ่มตัวเลือกบางอย่าง ล้างกฎการเขียนใหม่ อาจสร้างตารางฐานข้อมูล หรือตรวจสอบความแตกต่างของเวอร์ชันในการติดตั้ง – การปิดใช้งานและ hooks ถอนการติดตั้งนั้นพบได้น้อยกว่ามาก
จุดที่นี่? ผู้เขียนปลั๊กอินหลายคนไม่ใช้เวลาในการทำความสะอาดตัวเอง การติดตั้ง WordPress จำเป็นต้องมีตารางแบบกำหนดเองที่คุณสร้างขึ้นหลังจากลบปลั๊กอินหรือไม่? ทำไมไม่ล้างตัวเลือกสองสามตัวที่เป็นเอกสิทธิ์ของปลั๊กอินก่อนที่จะทิ้งมัน?
ในบทความนี้ ฉันจะแสดงให้คุณเห็นถึงวิธีใช้การเปิดใช้งาน การปิดใช้งาน และการยกเลิกการติดตั้ง hooks เพื่อเริ่มต้นปลั๊กอินและทำความสะอาดสิ่งต่างๆ ได้ง่ายขึ้นหลังจากที่ผู้ใช้ใช้งานผลิตภัณฑ์ของคุณเสร็จแล้ว
- ตะขอการเปิดใช้งาน
- ลำดับการติดตั้ง
- กฎการเขียนซ้ำแบบฟลัชชิง
- การสร้างตารางฐานข้อมูล
- การตรวจสอบการพึ่งพา
- ตะขอปิดการใช้งาน
- ตะขอถอนการติดตั้ง
- ความปลอดภัยเพิ่มเติม
- ได้เวลาทำความสะอาดแล้ว
หมายเหตุ: หากคุณวางแผนที่จะอ่านบทความนี้ เราขอแนะนำให้คุณดูส่วน "ความปลอดภัยเพิ่มเติม" ในตอนท้าย ซึ่งช่วยเสริมโค้ดด้วยการตรวจสอบความปลอดภัยอันมีค่า นอกจากนี้ หากคุณต้องการความช่วยเหลือเกี่ยวกับปลั๊กอิน WordPress ต่อไปนี้คือข้อมูลสรุปเกี่ยวกับการใช้ WordPress hooks และวิธีเปิดใช้งานฟังก์ชันใน WordPress
ตะขอการเปิดใช้งาน
แม้ว่าตะขอเปิดใช้งานจะค่อนข้างตรงไปตรงมา แต่การติดตั้งเป็นกรณีพิเศษเล็กน้อย ดังนั้น เราจะต้องให้ความสนใจกับลำดับของเหตุการณ์ ก่อนที่เราจะพูดถึงเรื่องทั้งหมดนี้ นี่เป็นตัวอย่างง่ายๆ:
กุญแจสำคัญคือฟังก์ชัน register_activation_hook()
พารามิเตอร์แรกคือพาธไปยังไฟล์ปลั๊กอินหลัก พารามิเตอร์ที่สองกำหนดฟังก์ชันที่จะรัน ภายใน ฟังก์ชัน register_activation_hook()
เป็นตัวห่อหุ้มสำหรับการทำงาน “activate_[plugin_name]” แต่เนื่องจากใช้งานง่ายกว่าเล็กน้อย จึงเป็นเรื่องปกติที่จะเห็น hook ในปลั๊กอิน
ลำดับการติดตั้ง
การทำความเข้าใจลำดับการติดตั้งมีความสำคัญ เนื่องจากจะช่วยป้องกันการใช้วิธีการที่คุณอาจคุ้นเคย register_activation_hook()
ถูกเรียกระหว่างผู้ใช้ที่คลิกลิงก์เปิดใช้งานและเห็นการแจ้งเตือนการเปิดใช้งาน มันทำงานบนหน้าตัวกลางซึ่งเปลี่ยนเส้นทางทันทีก่อนที่ hook ใด ๆ จะมีโอกาสทำงาน
มาดูตัวอย่างกันว่าทำไมเรื่องนี้ถึงเป็นเรื่องใหญ่:
กฎการเขียนซ้ำแบบฟลัชชิง
ปลั๊กอินจำนวนหนึ่งสร้างประเภทโพสต์ที่กำหนดเอง การล้างกฎการเขียนซ้ำในการเปิดใช้งานเพื่อให้แน่ใจว่าผู้ใช้จะไม่ได้รับข้อผิดพลาด 404 เมื่อไปที่โพสต์จากประเภทโพสต์ที่กำหนดเองใหม่ถือเป็นการดำเนินการที่ชาญฉลาด
รหัสด้านล่างดูเหมือนมีเหตุผล แต่จะล้มเหลว
ดูเหมือน สมบูรณ์แบบ มีการสร้างประเภทโพสต์ที่กำหนดเองและเมื่อเปิดใช้งาน เราจะล้างกฎการเขียนซ้ำ ปัญหาคือยังไม่มีการสร้างประเภทโพสต์ที่กำหนดเองเมื่อเราล้างกฎการเขียนซ้ำ
นี่คือลักษณะของโฟลว์กระบวนการ:
- ผู้ใช้ติดตั้งปลั๊กอิน
- ผู้ใช้คลิกลิงก์เปิดใช้งาน
- หน้าตัวกลางเรียกใช้ hook การเปิดใช้งานเท่านั้น ไม่มีอะไรอื่น สิ่งนี้จะล้างกฎการเขียนซ้ำ
- ปลั๊กอินทำงานอยู่และโค้ดทำงานตามปกติ ลงทะเบียนประเภทโพสต์ที่กำหนดเองแล้ว
โซลูชันที่โพสต์บน Stack Overflow ซึ่งรับรองโดย WordPress Codex อย่างเป็นทางการ ช่วยแก้ปัญหาเล็กๆ น้อยๆ ของเราได้ การแก้ปัญหาเกี่ยวข้องกับการเพิ่มตัวเลือกเพื่อระบุว่าเพิ่งติดตั้งปลั๊กอิน
หากมีตัวเลือกนี้ เราจะดำเนินการเปิดใช้งานของเราแล้วลบออก
บางอย่างเช่นนี้:
โดยส่วนตัวแล้วฉันไม่ชอบวิธีแก้ปัญหานี้มากเกินไป ปัญหาคือการตรวจสอบบรรทัดที่แปดทำงานทุกครั้งที่โหลดหน้าเดียว ไม่มีอะไรต้องกังวล เนื่องจากจะไม่ทำให้เซิร์ฟเวอร์ของคุณทำงานหนักมาก และจะไม่ทำให้เว็บไซต์ช้าลงสำหรับผู้ใช้ของคุณ เป็นการตรวจสอบอย่างรวดเร็วโดยมีผลกระทบเล็กน้อยต่อประสิทธิภาพการทำงาน อย่างไรก็ตาม มันไม่จำเป็น 99.9% ของเวลาทั้งหมด
มีวิธีแก้ปัญหาที่ดีกว่าที่กล่าวถึงใน Codex ในเอกสารประกอบสำหรับ flush_rewrite_rules()
ในโซลูชันนี้ เราใช้โมดูลของฟังก์ชันของเราเพื่อลงทะเบียนประเภทโพสต์ที่กำหนดเองในการเปิดใช้งานแยกกัน:
แทนที่จะอาศัยการตรวจสอบที่ต้องเรียกใช้ตลอดเวลา เราใช้ฟังก์ชันการเปิดใช้งานเพื่อลงทะเบียนประเภทโพสต์ของเรา โปรดทราบว่าเมื่อเปิดใช้งานปลั๊กอินแล้ว ประเภทโพสต์จะถูกลงทะเบียนจาก init
hook เสมอ
นี่เป็นตัวอย่างที่น่าเศร้าของ Codex ที่มีอยู่ทั่วทุกแห่ง โดยทั่วไป WordPress มีเอกสารประกอบที่ดี แต่หากมีบางสิ่งที่ดูเหมือนสิ้นเปลืองหรือไร้เหตุผล อย่ากลัวที่จะทำวิจัยของคุณเอง
การสร้างตารางฐานข้อมูล
งานอื่นที่ปลั๊กอินบางตัวดำเนินการคือการสร้างตารางฐานข้อมูล บ่อยครั้งสิ่งนี้ไม่จำเป็น แต่มีบางกรณีการใช้งานที่ถูกต้อง
ตัวอย่างนี้จากบทความ Codex เรื่อง การสร้างตาราง แสดงให้เห็นว่าสามารถใช้การเรียกการเปิดใช้งานได้หลายครั้ง:
ฟังก์ชั่นแรก jal_install()
สร้างตารางฐานข้อมูลใหม่ ฟังก์ชันที่สอง jal_install_data
เพิ่มข้อมูลเริ่มต้นลงในตาราง แทนที่จะใช้ register_activation_hook()
เพื่อเพิ่มฟังก์ชันหนึ่งที่มีรหัสทั้งหมดนี้ เราสามารถใช้ register_activation_hook
หลายครั้ง

นี่เป็นแนวทางปฏิบัติที่ยอดเยี่ยมสำหรับโมดูลาร์ ด้านหนึ่ง คุณไม่ จำเป็นต้อง เพิ่มข้อมูลการทดสอบเบื้องต้น เพราะทำได้ง่ายเพียงแค่ถอด hook การเปิดใช้งานออก คุณจึงสามารถคงฟังก์ชันไว้ได้ ในทางกลับกัน คุณมีอิสระที่จะนำฟังก์ชันเหล่านี้มาใช้ใหม่ได้ทุกที่ เนื่องจากแยกจากกัน
การตรวจสอบการพึ่งพา
งานทั่วไปอื่นสำหรับฟังก์ชันการเปิดใช้งานคือการตรวจสอบการขึ้นต่อกัน ปลั๊กอินของคุณอาจใช้ WordPress รุ่นใดรุ่นหนึ่ง ปลั๊กอินอื่น หรือแม้แต่ PHP รุ่นใดรุ่นหนึ่ง
รหัสด้านล่างตรวจสอบเวอร์ชัน WP และ PHP ขั้นต่ำ และเปลี่ยนเส้นทางผู้ใช้ (โดยไม่ต้องเปิดใช้งานปลั๊กอิน) หากจำเป็น:
ตะขอปิดการใช้งาน
ตะขอปิดใช้งานจะทำงานเมื่อผู้ใช้ปิดใช้งานปลั๊กอิน แต่ก่อนที่จะถอนการติดตั้ง (ลบ) ตะขอปิดใช้งานใช้ในลักษณะเดียวกับตะขอเปิดใช้งาน:
การปิดใช้งานหมายความว่าผู้ใช้ปิดใช้งานปลั๊กอินของคุณเท่านั้น ดังนั้นคุณจึงไม่ต้องการดำเนินการมากเท่ากับที่คุณทำในระหว่างการถอนการติดตั้ง คุณอาจต้องการล้างกฎการเขียนใหม่ แต่ในขั้นตอนนี้ คุณจะไม่ต้องการกำจัดตัวเลือกและตารางฐานข้อมูลทั้งหมดของคุณ (ถ้าคุณมี)
สิ่งนี้ค่อนข้างตรงไปตรงมา แต่ฉันจะให้ความสนใจเป็นพิเศษกับการล้างกฎการเขียนซ้ำ เนื่องจากกฎเหล่านี้มีปัญหาอีกครั้ง
codex แนะนำให้ทำตามที่แสดงด้านล่าง แต่ ไม่ได้ผล :
เหตุผลที่ใช้ไม่ได้ก็เหมือนเดิม การปิดใช้งานจะดำเนินการ init
hook ซึ่งหมายความว่าในขณะที่เรากำลังปิดใช้งานปลั๊กอิน เรากำลังลงทะเบียนประเภทโพสต์ที่กำหนดเองของเราด้วย กฎการเขียนซ้ำถูกล้าง แต่คำนึงถึงประเภทโพสต์ที่กำหนดเอง
มีตั๋ว Trac เพื่อแก้ไขปัญหานี้ แต่จนถึงตอนนี้ ฉันไม่สามารถให้วิธีที่ดีในการทำเช่นนี้แก่คุณได้ วิธีเดียวที่ฉันพบว่าใช้ได้ผลคือการลบกฎการเขียนใหม่ทั้งหมด:
แม้ว่าสิ่งนี้จะได้ผลสำหรับฉันในอดีต แต่ฉันจะไม่แนะนำ มันทำให้เกิดความไม่แน่นอนมากกว่าปัญหาของการมีกฎการเขียนใหม่เพิ่มเติมสองสามข้อ ฉันอยากจะแสดงหมายเหตุสำหรับผู้ใช้ที่ขอให้พวกเขาไปที่การตั้งค่าลิงก์ถาวรหลังจากปิดใช้งาน ซึ่งจะล้างกฎการเขียนซ้ำ จนกว่าจะมีการนำวิธีแก้ปัญหาที่ดีกว่ามาใช้ เรายังติดอยู่กับสิ่งนี้… ขออภัย!
ตะขอถอนการติดตั้ง
มีสองวิธีในการรันโค้ดเมื่อถอนการติดตั้งปลั๊กอิน คุณสามารถใช้เบ็ดถอนการติดตั้งผ่าน register_uninstall_hook()
หรือคุณสามารถใช้ไฟล์ uninstall.php
เฉพาะภายในปลั๊กอินของคุณ ฉันจะแสดงให้คุณเห็นทั้งคู่ แต่วิธีที่ต้องการคือการใช้ไฟล์ถอนการติดตั้ง
ปัญหาหลักของเบ็ดถอนการติดตั้งคือ "ป้องกันไม่ให้ไฟล์ปลั๊กอินหลักทำงานระหว่างการถอนการติดตั้ง ซึ่งอาจเป็นปัญหาได้หากปลั๊กอินเรียกใช้โค้ดในพื้นที่ส่วนกลาง นอกจากนี้ยังดีกว่าที่รหัสถอนการติดตั้งเป็นแบบรวมศูนย์” – สก็อตต์ ไรลีย์
รหัสด้านล่างแสดงกระบวนการถอนการติดตั้งโดยใช้เบ็ดพื้นฐาน:
ตามที่กล่าวไว้ นี่ไม่ใช่ทางออกที่ดีที่สุด วิธีที่ดีกว่ามากในการจัดการกับการถอนการติดตั้งคือการใช้ไฟล์ uninstall.php
สิ่งที่คุณต้องทำคือสร้างมันขึ้นมาและมันจะถูกใช้งานหากมี
อย่างที่คุณเห็น นี่เป็นวิธีแก้ปัญหาที่ง่ายกว่าจริงๆ ดีที่สุดคือเป็นตัวของตัวเอง
ความปลอดภัยเพิ่มเติม
ฉันไม่ต้องการให้ตัวอย่างที่แสดงปัญหาที่เกี่ยวข้องกับความปลอดภัยซับซ้อนเกินไป แต่คุณควรทำตามขั้นตอนบางอย่างเพื่อให้แน่ใจว่าเฉพาะผู้ที่ได้รับอนุญาตให้ดำเนินการดังกล่าวเท่านั้นที่สามารถเรียกใช้การดำเนินการเหล่านี้ได้
ใช้ข้อมูลโค้ดต่อไปนี้ในการเปิดใช้งานและปิดใช้งาน:
บล็อกรหัสนี้ทำให้แน่ใจว่าผู้ใช้มีสิทธิ์ในการดำเนินการนี้และการกระทำนั้นเกิดขึ้นบนหน้าที่เหมาะสม สิ่งนี้ควรป้องกันความพยายามที่เป็นอันตรายส่วนใหญ่
กระบวนการถอนการติดตั้งเป็นแบบพิเศษ ดังนั้น เราจำเป็นต้องใช้โค้ดที่ต่างกันเล็กน้อย:
ได้เวลาทำความสะอาดแล้ว
หากปลั๊กอินของคุณเพิ่มสิ่งต่าง ๆ ให้กับ WordPress ก็เป็นหน้าที่ของคุณในฐานะนักพัฒนาที่จะต้องลบมันออกเมื่อผู้ใช้ตัดสินใจที่จะลบปลั๊กอินของคุณ
การใช้วิธีการเปิดใช้งาน การปิดใช้งาน และการถอนการติดตั้งที่อธิบายข้างต้นจะช่วยให้คุณสร้างระบบที่ดำเนินการนี้ได้อย่างปลอดภัย ฉันยังแนะนำเป็นอย่างยิ่งให้อ่านเธรด Stackexchange ซึ่งสรุปกระบวนการเหล่านี้ในสภาพแวดล้อม OOP
หากคุณยังไม่ได้เป็นสมาชิก WPMU DEV สมัครวันนี้เพื่อทดลองใช้ฟรี ปราศจากความเสี่ยง ในฐานะสมาชิก คุณจะสามารถเข้าถึงปลั๊กอินที่ยอดเยี่ยมทั้งหมดของเรา และบริการโฮสติ้งที่รวดเร็ว พร้อมการสนับสนุนจากผู้เชี่ยวชาญตลอด 24 ชั่วโมงทุกวันสำหรับคำถามและปัญหาที่เกี่ยวข้องกับ WordPress ของคุณ
แท็ก: