ใช้ WordPress Hooks เพื่อล้างโค้ด เปิดใช้งาน & ถอนการติดตั้ง

เผยแพร่แล้ว: 2015-01-23

ผู้เขียนปลั๊กอินอุทิศเวลาและพลังงานอย่างมากให้กับฟังก์ชันการทำงานหลักของผลิตภัณฑ์ของตน โดยที่พวกเขายอมให้สิ่งที่มีความสำคัญน้อยกว่าตกอยู่ริมทาง

เปิดใช้งานและปิดใช้งานตัวอย่างเช่น แม้ว่าการเปิดใช้งาน hooks จะแพร่หลาย – ปลั๊กอินจำนวนมากจำเป็นต้องเพิ่มตัวเลือกบางอย่าง ล้างกฎการเขียนใหม่ อาจสร้างตารางฐานข้อมูล หรือตรวจสอบความแตกต่างของเวอร์ชันในการติดตั้ง – การปิดใช้งานและ hooks ถอนการติดตั้งนั้นพบได้น้อยกว่ามาก

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

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

  • ตะขอการเปิดใช้งาน
    • ลำดับการติดตั้ง
    • กฎการเขียนซ้ำแบบฟลัชชิง
    • การสร้างตารางฐานข้อมูล
    • การตรวจสอบการพึ่งพา
  • ตะขอปิดการใช้งาน
  • ตะขอถอนการติดตั้ง
  • ความปลอดภัยเพิ่มเติม
  • ได้เวลาทำความสะอาดแล้ว

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

ตะขอการเปิดใช้งาน

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

กำลังโหลดส่วนสำคัญ f356a899b7f009d136644383339db4f6

กุญแจสำคัญคือฟังก์ชัน register_activation_hook() พารามิเตอร์แรกคือพาธไปยังไฟล์ปลั๊กอินหลัก พารามิเตอร์ที่สองกำหนดฟังก์ชันที่จะรัน ภายใน ฟังก์ชัน register_activation_hook() เป็นตัวห่อหุ้มสำหรับการทำงาน “activate_[plugin_name]” แต่เนื่องจากใช้งานง่ายกว่าเล็กน้อย จึงเป็นเรื่องปกติที่จะเห็น hook ในปลั๊กอิน

ลำดับการติดตั้ง

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

มาดูตัวอย่างกันว่าทำไมเรื่องนี้ถึงเป็นเรื่องใหญ่:

กฎการเขียนซ้ำแบบฟลัชชิง

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

รหัสด้านล่างดูเหมือนมีเหตุผล แต่จะล้มเหลว

กำลังโหลดส่วนสำคัญ 7c656623608efd1785437ebe7cdb7350

ดูเหมือน สมบูรณ์แบบ มีการสร้างประเภทโพสต์ที่กำหนดเองและเมื่อเปิดใช้งาน เราจะล้างกฎการเขียนซ้ำ ปัญหาคือยังไม่มีการสร้างประเภทโพสต์ที่กำหนดเองเมื่อเราล้างกฎการเขียนซ้ำ

นี่คือลักษณะของโฟลว์กระบวนการ:

  1. ผู้ใช้ติดตั้งปลั๊กอิน
  2. ผู้ใช้คลิกลิงก์เปิดใช้งาน
  3. หน้าตัวกลางเรียกใช้ hook การเปิดใช้งานเท่านั้น ไม่มีอะไรอื่น สิ่งนี้จะล้างกฎการเขียนซ้ำ
  4. ปลั๊กอินทำงานอยู่และโค้ดทำงานตามปกติ ลงทะเบียนประเภทโพสต์ที่กำหนดเองแล้ว

โซลูชันที่โพสต์บน Stack Overflow ซึ่งรับรองโดย WordPress Codex อย่างเป็นทางการ ช่วยแก้ปัญหาเล็กๆ น้อยๆ ของเราได้ การแก้ปัญหาเกี่ยวข้องกับการเพิ่มตัวเลือกเพื่อระบุว่าเพิ่งติดตั้งปลั๊กอิน

หากมีตัวเลือกนี้ เราจะดำเนินการเปิดใช้งานของเราแล้วลบออก

บางอย่างเช่นนี้:

กำลังโหลดส่วนสำคัญ 6f0927b3bf9807e426c8778a3bf3a797

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

มีวิธีแก้ปัญหาที่ดีกว่าที่กล่าวถึงใน Codex ในเอกสารประกอบสำหรับ flush_rewrite_rules() ในโซลูชันนี้ เราใช้โมดูลของฟังก์ชันของเราเพื่อลงทะเบียนประเภทโพสต์ที่กำหนดเองในการเปิดใช้งานแยกกัน:

กำลังโหลดส่วนสำคัญ b44bf08bf511277184a49de53c0c3ed8

แทนที่จะอาศัยการตรวจสอบที่ต้องเรียกใช้ตลอดเวลา เราใช้ฟังก์ชันการเปิดใช้งานเพื่อลงทะเบียนประเภทโพสต์ของเรา โปรดทราบว่าเมื่อเปิดใช้งานปลั๊กอินแล้ว ประเภทโพสต์จะถูกลงทะเบียนจาก init hook เสมอ

นี่เป็นตัวอย่างที่น่าเศร้าของ Codex ที่มีอยู่ทั่วทุกแห่ง โดยทั่วไป WordPress มีเอกสารประกอบที่ดี แต่หากมีบางสิ่งที่ดูเหมือนสิ้นเปลืองหรือไร้เหตุผล อย่ากลัวที่จะทำวิจัยของคุณเอง

การสร้างตารางฐานข้อมูล

งานอื่นที่ปลั๊กอินบางตัวดำเนินการคือการสร้างตารางฐานข้อมูล บ่อยครั้งสิ่งนี้ไม่จำเป็น แต่มีบางกรณีการใช้งานที่ถูกต้อง

ตัวอย่างนี้จากบทความ Codex เรื่อง การสร้างตาราง แสดงให้เห็นว่าสามารถใช้การเรียกการเปิดใช้งานได้หลายครั้ง:

กำลังโหลดส่วนสำคัญ 9a1d4757d023f2442093a9a158cdb6b4

ฟังก์ชั่นแรก jal_install() สร้างตารางฐานข้อมูลใหม่ ฟังก์ชันที่สอง jal_install_data เพิ่มข้อมูลเริ่มต้นลงในตาราง แทนที่จะใช้ register_activation_hook() เพื่อเพิ่มฟังก์ชันหนึ่งที่มีรหัสทั้งหมดนี้ เราสามารถใช้ register_activation_hook หลายครั้ง

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

การตรวจสอบการพึ่งพา

งานทั่วไปอื่นสำหรับฟังก์ชันการเปิดใช้งานคือการตรวจสอบการขึ้นต่อกัน ปลั๊กอินของคุณอาจใช้ WordPress รุ่นใดรุ่นหนึ่ง ปลั๊กอินอื่น หรือแม้แต่ PHP รุ่นใดรุ่นหนึ่ง

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

กำลังโหลดส่วนสำคัญ 79a2c5414969291ec90cac11c38b7522

ตะขอปิดการใช้งาน

ตะขอปิดใช้งานจะทำงานเมื่อผู้ใช้ปิดใช้งานปลั๊กอิน แต่ก่อนที่จะถอนการติดตั้ง (ลบ) ตะขอปิดใช้งานใช้ในลักษณะเดียวกับตะขอเปิดใช้งาน:

กำลังโหลดส่วนสำคัญ 6ed9bb66ee1863ab3e84db1f9f753792

การปิดใช้งานหมายความว่าผู้ใช้ปิดใช้งานปลั๊กอินของคุณเท่านั้น ดังนั้นคุณจึงไม่ต้องการดำเนินการมากเท่ากับที่คุณทำในระหว่างการถอนการติดตั้ง คุณอาจต้องการล้างกฎการเขียนใหม่ แต่ในขั้นตอนนี้ คุณจะไม่ต้องการกำจัดตัวเลือกและตารางฐานข้อมูลทั้งหมดของคุณ (ถ้าคุณมี)

สิ่งนี้ค่อนข้างตรงไปตรงมา แต่ฉันจะให้ความสนใจเป็นพิเศษกับการล้างกฎการเขียนซ้ำ เนื่องจากกฎเหล่านี้มีปัญหาอีกครั้ง

codex แนะนำให้ทำตามที่แสดงด้านล่าง แต่ ไม่ได้ผล :

กำลังโหลดส่วนสำคัญ 4440a0178b4e34506530e13d0ead8958

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

มีตั๋ว Trac เพื่อแก้ไขปัญหานี้ แต่จนถึงตอนนี้ ฉันไม่สามารถให้วิธีที่ดีในการทำเช่นนี้แก่คุณได้ วิธีเดียวที่ฉันพบว่าใช้ได้ผลคือการลบกฎการเขียนใหม่ทั้งหมด:

กำลังโหลดส่วนสำคัญ 98b496826278084a2f7a5ea27994f781

แม้ว่าสิ่งนี้จะได้ผลสำหรับฉันในอดีต แต่ฉันจะไม่แนะนำ มันทำให้เกิดความไม่แน่นอนมากกว่าปัญหาของการมีกฎการเขียนใหม่เพิ่มเติมสองสามข้อ ฉันอยากจะแสดงหมายเหตุสำหรับผู้ใช้ที่ขอให้พวกเขาไปที่การตั้งค่าลิงก์ถาวรหลังจากปิดใช้งาน ซึ่งจะล้างกฎการเขียนซ้ำ จนกว่าจะมีการนำวิธีแก้ปัญหาที่ดีกว่ามาใช้ เรายังติดอยู่กับสิ่งนี้… ขออภัย!

ตะขอถอนการติดตั้ง

มีสองวิธีในการรันโค้ดเมื่อถอนการติดตั้งปลั๊กอิน คุณสามารถใช้เบ็ดถอนการติดตั้งผ่าน register_uninstall_hook() หรือคุณสามารถใช้ไฟล์ uninstall.php เฉพาะภายในปลั๊กอินของคุณ ฉันจะแสดงให้คุณเห็นทั้งคู่ แต่วิธีที่ต้องการคือการใช้ไฟล์ถอนการติดตั้ง

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

รหัสด้านล่างแสดงกระบวนการถอนการติดตั้งโดยใช้เบ็ดพื้นฐาน:

กำลังโหลดส่วนสำคัญ 040847db4739148900b1ee29d227d71d

ตามที่กล่าวไว้ นี่ไม่ใช่ทางออกที่ดีที่สุด วิธีที่ดีกว่ามากในการจัดการกับการถอนการติดตั้งคือการใช้ไฟล์ uninstall.php สิ่งที่คุณต้องทำคือสร้างมันขึ้นมาและมันจะถูกใช้งานหากมี

กำลังโหลดส่วนสำคัญ 44dde25dcb57b4239be8586f4d04c765

อย่างที่คุณเห็น นี่เป็นวิธีแก้ปัญหาที่ง่ายกว่าจริงๆ ดีที่สุดคือเป็นตัวของตัวเอง

ความปลอดภัยเพิ่มเติม

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

ใช้ข้อมูลโค้ดต่อไปนี้ในการเปิดใช้งานและปิดใช้งาน:

กำลังโหลดส่วนสำคัญ 357037989065f89c15f049314e9831bf

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

กระบวนการถอนการติดตั้งเป็นแบบพิเศษ ดังนั้น เราจำเป็นต้องใช้โค้ดที่ต่างกันเล็กน้อย:

กำลังโหลดส่วนสำคัญ 541c93cfa9b89e1e6c7b48b06732d31f

ได้เวลาทำความสะอาดแล้ว

หากปลั๊กอินของคุณเพิ่มสิ่งต่าง ๆ ให้กับ WordPress ก็เป็นหน้าที่ของคุณในฐานะนักพัฒนาที่จะต้องลบมันออกเมื่อผู้ใช้ตัดสินใจที่จะลบปลั๊กอินของคุณ

การใช้วิธีการเปิดใช้งาน การปิดใช้งาน และการถอนการติดตั้งที่อธิบายข้างต้นจะช่วยให้คุณสร้างระบบที่ดำเนินการนี้ได้อย่างปลอดภัย ฉันยังแนะนำเป็นอย่างยิ่งให้อ่านเธรด Stackexchange ซึ่งสรุปกระบวนการเหล่านี้ในสภาพแวดล้อม OOP

หากคุณยังไม่ได้เป็นสมาชิก WPMU DEV สมัครวันนี้เพื่อทดลองใช้ฟรี ปราศจากความเสี่ยง ในฐานะสมาชิก คุณจะสามารถเข้าถึงปลั๊กอินที่ยอดเยี่ยมทั้งหมดของเรา และบริการโฮสติ้งที่รวดเร็ว พร้อมการสนับสนุนจากผู้เชี่ยวชาญตลอด 24 ชั่วโมงทุกวันสำหรับคำถามและปัญหาที่เกี่ยวข้องกับ WordPress ของคุณ

คุณพบว่าปลั๊กอินทำให้ฐานข้อมูลของคุณยุ่งเหยิงเมื่อคุณลบออกหรือไม่? แจ้งให้เราทราบว่าคุณคิดอย่างไรในความคิดเห็นด้านล่าง
แท็ก: