คู่มือฉบับสมบูรณ์ในการพัฒนา WordPress Plugins: สร้างโมดูลฟังก์ชันที่กำหนดเองตั้งแต่เริ่มต้น

อ่าน 3 นาที
2026-03-20
2026-06-03
2,318
I earn commissions when you shop through the links below, at no additional cost to you.

โครงสร้างหลักของการพัฒนา WordPress Plugin

ทุก WordPress Plugin ที่ใช้งานได้เริ่มต้นจากไฟล์หลักหนึ่งไฟล์ ไฟล์หลักนี้เป็นจุดเริ่มต้นของ Plugin ทั้งหมด จำเป็นต้องปฏิบัติตามข้อกำหนดการตั้งชื่อและคำอธิบายเฉพาะ เพื่อให้ WordPress สามารถระบุและเปิดใช้งานได้ วิธีการทั่วไปคือการสร้างโฟลเดอร์ที่ตั้งชื่อตามชื่อของ Plugin ในไดเรกทอรี /wp-content/plugins/ เช่น /my-first-plugin/จากนั้นสร้างไฟล์หลักในโฟลเดอร์นั้น

ไฟล์หลักมีหัวใจสำคัญคือคำอธิบายส่วนหัวของปลั๊กอิน นี่คือบล็อกคำอธิบายรูปแบบเฉพาะที่วางไว้ด้านบนสุดของไฟล์ PHP ตัวอย่างคำอธิบายส่วนหัวของปลั๊กอินพื้นฐานมีดังนี้:

/**
 * Plugin Name:      我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个用于演示 WordPress 插件开发的简单插件。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

บล็อกคำอธิบายนี้บอก WordPress ถึงข้อมูลเมตาทั้งหมดเกี่ยวกับปลั๊กอิน โดยที่ Plugin Name เป็นข้อมูลที่ต้องกรอก หากไม่มี WordPress จะไม่สามารถระบุปลั๊กอินของคุณในรายการปลั๊กอินในแถบหลังบ้านได้Text Domain ใช้สำหรับสากลนิยม เป็นตัวระบุสำคัญสำหรับการเพิ่มการสนับสนุนหลายภาษาให้กับปลั๊กอินในภายหลัง

แนะนำให้อ่าน เริ่มต้นจากศูนย์: คู่มือฉบับสมบูรณ์และบทเรียนปฏิบัติจริงสำหรับการพัฒนา WordPress Plugin

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

UltaHost WordPress โฮสติ้ง
การรับประกันคืนเงินภายใน 30 วัน, แบนด์วิธและฐานข้อมูลไม่จำกัด, การป้องกัน DDoS ฟรี, ซื้อ 3 ปีลดราคา 50%
if ( ! defined( 'ABSPATH' ) ) {
    exit; // 防止直接访问文件
}

class My_First_Plugin {
    /**
     * 构造函数,用于初始化插件的主要钩子和功能
     */
    public function __construct() {
        $this->define_constants();
        $this->init_hooks();
    }

/**
     * 定义插件常量
     */
    private function define_constants() {
        define( 'MFP_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
        define( 'MFP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
        define( 'MFP_VERSION', '1.0.0' );
    }

/**
     * 初始化所有挂载点(Hooks)
     */
    private function init_hooks() {
        // 在这里添加动作钩子和过滤器钩子
        add_action( 'init', array( $this, 'load_textdomain' ) );
        add_action( 'admin_menu', array( $this, 'add_admin_menu' ) );
    }

// 其他方法将在这里定义...
}

// 实例化插件类
new My_First_Plugin();

โครงสร้างนี้แยกประเด็นที่สนใจออกอย่างชัดเจน ทำให้โค้ดง่ายต่อการบำรุงรักษาและขยาย การกำหนดค่าคงที่ (เช่น MFP_PLUGIN_PATH) จัดเตรียมจุดอ้างอิงที่ใช้งานได้ทั่วโลกสำหรับเส้นทางไฟล์, URL และเวอร์ชัน การโต้ตอบทั้งหมดกับแกนหลักของ WordPress เชื่อมต่อผ่านการกระทำและตัวกรอง (เรียกรวมกันว่า "hooks") ที่กำหนดไว้ใน init_hooks เมธอด

ทำความเข้าใจกับ Action และ Filter Hooks ให้ลึกซึ้ง

WordPress ระบบตะขอเป็นรากฐานของการขยายได้ ช่วยให้นักพัฒนาสามารถ “แฮงก์” รหัสที่กำหนดเองของพวกเขาเข้าไปในจุดเวลาที่เฉพาะเจาะจงของการดำเนินการของ WordPress core, ธีม หรือปลั๊กอินอื่น ๆ โดยไม่ต้องแก้ไขไฟล์ดั้งเดิม ตะขอแบ่งออกเป็นสองประเภทหลัก: ตะขอการกระทำ (Action Hooks) และตะขอตัวกรอง (Filter Hooks)

ตะขอการกระทำจะทำงานเมื่อเหตุการณ์เฉพาะเกิดขึ้น ใช้สำหรับเพิ่มหรือปรับเปลี่ยนฟังก์ชันการทำงาน ตัวอย่างเช่น เมื่อโพสต์ถูกเผยแพร่ (publish_post), เมนูผู้ดูแลระบบถูกแสดงผล (admin_menu) หรือสคริปต์จำเป็นต้องโหลด (wp_enqueue_scripts) เมื่อใดก็ตามที่ดำเนินการ จะทริกเกอร์ action hook งานของนักพัฒนาคือเขียนฟังก์ชัน callback และ “hook” มันเข้ากับ hook ที่เหมาะสม

ตัวอย่างเช่น การสร้างหน้าตั้งค่าอย่างง่ายสำหรับปลั๊กอิน จำเป็นต้อง hook เข้ากับ admin_menu hooks:

แนะนำให้อ่าน เริ่มต้นจากศูนย์: คู่มือและบทปฏิบัติการพัฒนาปลั๊กอิน WordPress แบบครบวงจร

public function add_admin_menu() {
    add_options_page(
        '我的插件设置',          // 页面标题
        '我的插件',              // 菜单标题
        'manage_options',        // 权限能力
        'my-plugin-settings',    // 菜单Slug
        array( $this, 'render_settings_page' ) // 回调函数
    );
}

ต่างจาก action hook, filter hook ใช้สำหรับปรับเปลี่ยนข้อมูล มันรับค่า (หรือชุดของค่า) อนุญาตให้ฟังก์ชัน callback ปรับเปลี่ยน แล้วส่งคืนค่าที่แก้ไขแล้ว WordPress Core เต็มไปด้วย filter ตัวอย่างเช่น the_content ใช้สำหรับกรองเนื้อหาโพสต์widget_title ใช้สำหรับการแก้ไขชื่อของวิดเจ็ต

สมมติว่าเราต้องการเพิ่มข้อความลิขสิทธิ์อัตโนมัติท้ายทุกบทความ เราสามารถใช้ the_content ตัวกรอง:

public function append_copyright( $content ) {
    if ( is_single() && in_the_loop() && is_main_query() ) {
        $copyright_text = '<p><em>ลิขสิทธิ์ของบทความนี้เป็นของเว็บไซต์ของเรา การนำไปเผยแพร่ต่อโปรดระบุแหล่งที่มา</em></p>';
        $content .= $copyright_text;
    }
    return $content;
}
// 在 init_hooks 方法中挂载: add_filter( 'the_content', array( $this, 'append_copyright' ) );

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

hosting.com 共享主机
高性能,配备 AMD EPYC CPU、NVMe SSD 存储和 LiteSpeed,全天候24小时、全天候的专家内部支持,高级安全措施,包括 SSL、暴力破解、恶意软件和 DDoS 防护,节省高达 73%

การพัฒนาอินเทอร์เฟซหลังบ้านและตัวเลือกการตั้งค่าของปลั๊กอิน

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

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

ขั้นแรก ลงทะเบียนกลุ่มตั้งค่าและฟิลด์ในฮุคเริ่มต้น:

แนะนำให้อ่าน คู่มือเริ่มต้นการพัฒนา WordPress Plugin: จากพื้นฐานสู่การเผยแพร่ในตลาดเต็มกระบวนการ

public function register_settings() {
    register_setting(
        'mfp_settings_group', // 设置组名,与 settings_fields() 调用对应
        'mfp_plugin_options', // 存储在 wp_options 表中的选项名
        array( $this, 'sanitize_settings' ) // 可选的回调,用于清理输入
    );

add_settings_section(
        'mfp_main_section',          // 区域ID
        '主要设置',                   // 区域标题
        array( $this, 'render_section_desc' ), // 区域描述回调
        'my-plugin-settings'         // 所属页面的Slug
    );

add_settings_field(
        'api_key_field',             // 字段ID
        'API密钥',                   // 字段标题
        array( $this, 'render_api_key_field' ), // 字段输入框渲染回调
        'my-plugin-settings',        // 页面Slug
        'mfp_main_section'           // 区域ID
    );
}

จากนั้น คุณต้องเขียนฟังก์ชันแสดงผลสำหรับแต่ละฟิลด์ ตัวอย่างเช่น สร้างช่องป้อนข้อมูลสำหรับฟิลด์คีย์ API ข้างต้น:

public function render_api_key_field() {
    $options = get_option( 'mfp_plugin_options' );
    $value = isset( $options['api_key'] ) ? esc_attr( $options['api_key'] ) : '';
    echo '<input type="password" id="api_key" name="mfp_plugin_options[api_key]" value="' . $value . '" class="regular-text" />';
    echo '<p class="description">กรุณากรอกคีย์ API ของบริการของคุณ</p>';
}

สุดท้าย สร้างฟังก์ชันสำหรับเรนเดอร์หน้าการตั้งค่าทั้งหมด ฟังก์ชันนี้จะถูกเรียกโดย add_options_page พารามิเตอร์คอลแบ็กของ:

โฮสติ้งแบบแชร์ของ InterServer
共享主机每月 $2.50 USD , 首月 $0.1 USD 优惠码 tryinterserver, 461个云应用脚本,一键安装。
public function render_settings_page() {
    // 检查用户权限
    if ( ! current_user_can( 'manage_options' ) ) {
        return;
    }
    ?&gt;
    <div class="wrap">
        <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
        <form action="/th/options.php/" method="post" data-trp-original-action="options.php">
            <?php
            // 输出安全相关字段
            settings_fields( 'mfp_settings_group' );
            // 输出具体的设置区域和字段
            do_settings_sections( 'my-plugin-settings' );
            // 输出提交按钮
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="th"/></form>
    </div>
    &lt;?php
}

ฟอร์มที่สร้างผ่าน Settings API ข้อมูลจะถูกประมวลผลผ่าน options.php โดยอัตโนมัติและบันทึกอย่างปลอดภัยลงใน wp_options ในตารางข้อมูล วิธีนี้ปลอดภัยและเป็นมาตรฐานมากกว่าการจัดการด้วยมือ $_POST ข้อมูลมีความปลอดภัยและเป็นมาตรฐานมากกว่า

แนวทางปฏิบัติที่ดีที่สุดสำหรับความปลอดภัย ประสิทธิภาพ และความเป็นสากลของปลั๊กอิน

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

ในด้านความปลอดภัย หลักการแรกคือ “อย่าเชื่อถือข้อมูลที่ผู้ใช้ป้อนเข้ามา” ข้อมูลทั้งหมดที่มาจากผู้ใช้หรือแหล่งภายนอก (เช่น $_GET$_POST$_COOKIE), ก่อนที่จะนำไปใช้ในการสืบค้นฐานข้อมูล, แสดงผลบนหน้าเว็บ หรือดำเนินการกับไฟล์ ต้องได้รับการตรวจสอบ, ทำความสะอาด หรือหนีออก
- การหนีออกของผลลัพธ์: ใช้ฟังก์ชันที่ WordPress จัดเตรียมไว้ เช่น esc_html()esc_attr()esc_url()wp_kses_post() เพื่อให้แน่ใจว่าข้อมูลที่แสดงผลใน HTML นั้นปลอดภัย
- เตรียมการสืบค้นฐานข้อมูล: ใช้ $wpdb วิธีการที่ให้โดยคลาส เช่น $wpdb->prepare()เพื่อป้องกันการโจมตีด้วย SQL injection
- ตรวจสอบสิทธิ์: ก่อนดำเนินการจัดการหรือเข้าถึงข้อมูลที่ละเอียดอ่อน ต้องใช้ current_user_can() ตรวจสอบความสามารถของผู้ใช้ (Capability)
- ใช้ Nonce: สำหรับการส่งแบบฟอร์มหรือคำขอ Ajax ให้ใช้ wp_nonce_field()wp_create_nonce()wp_verify_nonce() เพื่อป้องกันการโจมตีแบบข้ามไซต์ (CSRF)

การปรับปรุงประสิทธิภาพก็มีความสำคัญเช่นกัน ปลั๊กอินที่เทอะทะจะทำให้เว็บไซต์ทั้งหมดช้าลง หลักปฏิบัติที่สำคัญ ได้แก่:
1. โหลดทรัพยากรตามความต้องการ: ใช้ฟังก์ชัน wp_enqueue_script()wp_enqueue_style() และโหลดไฟล์ JavaScript และ CSS เฉพาะในหน้าที่ต้องการ (ผ่านการตรวจสอบเงื่อนไขเช่น is_admin()หรือฮุคเฉพาะ) เท่านั้น
2. ปรับปรุงการสืบค้นฐานข้อมูล: หลีกเลี่ยงการสืบค้นในลูป ใช้ประโยชน์จากแคชอ็อบเจ็กต์ของ WordPress และ Transients API เพื่อแคชผลการสืบค้นที่ใช้เวลานานหรือข้อมูลจากการร้องขอ API ระยะไกล ตัวอย่างเช่น การใช้ set_transient()get_transient() สามารถแคชข้อมูลได้อย่างง่ายดาย
- การเพิ่มประสิทธิภาพของฮุค: ติดตั้งเฉพาะฮุคที่จำเป็น และเมื่อปลั๊กอินถูกปิดใช้งาน ให้ดำเนินการ register_deactivation_hook() การล้างข้อมูลเพื่อลบตารางฐานข้อมูลหรือตัวเลือกที่กำหนดเอง

สุดท้าย การทำให้เป็นสากล (i18n) ช่วยให้ปลั๊กอินของคุณสามารถใช้งานได้ทั่วโลก โดยใช้ __()_e()_x() ใช้ฟังก์ชันการแปลเพื่อดำเนินการ ขั้นตอนเฉพาะมีดังนี้:
1. 用 __('文本', 'my-first-plugin') ห่อหุ้มสตริงที่ผู้ใช้มองเห็นทั้งหมดText Domain ต้องตรงกับที่ระบุในคอมเมนต์ส่วนหัวของปลั๊กอิน
2. 使用 load_textdomain() หรือที่ทันสมัยกว่า load_plugin_textdomain() ฟังก์ชันเพื่อโหลดไฟล์การแปล โดยทั่วไปจะทำในฟังก์ชัน callback ที่ติดตั้งใน init ฮุค

public function load_textdomain() {
    load_plugin_textdomain( 'my-first-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
}

3. 使用 Poedit 等工具生成 .pot ไฟล์เทมเพลตสำหรับนักแปลในการสร้าง .po.mo ไฟล์ และเก็บไว้ในไดเรกทอรีปลั๊กอิน /languages/ ไดเรกทอรีอย่างถูกต้องหรือไม่

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

สรุป

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

คำถามที่พบบ่อย (FAQ)

การพัฒนา WordPress ปลั๊กอินต้องใช้พื้นฐานการเขียนโปรแกรมแบบใด?

การพัฒนา WordPress ปลั๊กอินต้องมีความรู้พื้นฐาน PHP ที่มั่นคง เนื่องจากตรรกะหลักของปลั๊กอินเขียนด้วย PHP นอกจากนี้ ยังต้องมีความเข้าใจพื้นฐานเกี่ยวกับ HTML, CSS และ JavaScript เพื่อสร้างและตกแต่งอินเทอร์เฟซส่วนหน้าและปฏิสัมพันธ์ ความคุ้นเคยกับแนวคิดพื้นฐานและการดำเนินการของฐานข้อมูล MySQL (เช่น CRUD) ก็มีประโยชน์สำหรับการจัดการข้อมูล ที่สำคัญที่สุดคือต้องเข้าใจแนวคิดหลักของ WordPress เช่น ฮุค (Hooks), ลูป (The Loop) และโครงสร้างลำดับชั้นของเทมเพลต

วิธีการดีบั๊กปลั๊กอิน WordPress ที่พัฒนาขึ้นเอง?

การดีบั๊กปลั๊กอิน WordPress มีหลายวิธีที่มีประสิทธิภาพ ประการแรก ควรเปิดใช้งาน wp-config.php ของคุณ โดยตั้งค่า WP_DEBUG เป็น trueซึ่งจะแสดงข้อผิดพลาด คำเตือน และการแจ้งเตือนของ PHP บนหน้าจอ ประการที่สอง ใช้ฟังก์ชัน error_log() หรือ WP_DEBUG_LOG บันทึกข้อมูลการดีบักลงในไฟล์บันทึกของเซิร์ฟเวอร์ เพื่อหลีกเลี่ยงการรบกวนการแสดงผลที่ส่วนหน้า สำหรับตรรกะที่ซับซ้อน สามารถใช้เครื่องมือดีบัก PHP ระดับมืออาชีพ เช่น Xdebug ร่วมกับ IDE (เช่น PhpStorm, VS Code) เพื่อทำการดีบักแบบเบรกพอยต์ นอกจากนี้ การแสดงค่าตัวแปรชั่วคราวในโค้ด (ในสภาพแวดล้อมการพัฒนา) ก็เป็นวิธีทั่วไปในการระบุปัญหาอย่างรวดเร็ว

ปลั๊กอินที่ฉันพัฒนาจะส่งไปยังไดเรกทอรีปลั๊กอินอย่างเป็นทางการของ WordPress ได้อย่างไร

ก่อนส่งปลั๊กอินไปยังไดเรกทอรีทางการ โปรดตรวจสอบให้แน่ใจว่ามันปฏิบัติตามมาตรฐานการเข้ารหัสของ WordPress อย่างเคร่งครัด และผ่านการตรวจสอบจาก PHP_CodeSnifferWordPress-Coding-Standards คุณต้องมีบัญชี WordPress.org จากนั้นส่งปลั๊กอินในแผงควบคุม “ผู้พัฒนา” กระบวนการนี้รวมถึงการกรอกข้อมูลปลั๊กอินโดยละเอียด (README) ตรวจสอบให้มั่นใจว่าโค้ดมีความปลอดภัยและไม่มีอันตราย ให้คำประกาศความเข้ากันได้ และเตรียมไอคอนและภาพแบนเนอร์ที่ตรงตามข้อกำหนดของไดเรกทอรี หลังจากส่ง ฝ่ายตรวจสอบปลั๊กอินจะทำการตรวจสอบด้วยตนเอง ซึ่งกระบวนการนี้อาจใช้เวลาหลายสัปดาห์ หลังจากผ่านการตรวจสอบแล้ว ปลั๊กอินของคุณจะสามารถถูกค้นหาและติดตั้งโดยผู้ใช้ทั่วโลกได้

ควรสร้างและลบตารางฐานข้อมูลที่กำหนดเองในปลั๊กอินเมื่อใด

เวลาที่ดีที่สุดในการสร้างตารางฐานข้อมูลแบบกำหนดเองคือเมื่อปลั๊กอินถูกเปิดใช้งาน คุณควรใช้ฟังก์ชัน register_activation_hook() เพื่อเชื่อมโยงฟังก์ชันเรียกกลับ ซึ่งภายในฟังก์ชันนี้ให้ใช้ฟังก์ชัน dbDelta() เพื่อสร้างหรืออัปเดตโครงสร้างตารางอย่างปลอดภัยdbDelta() ต้องการรูปแบบคำสั่ง SQL ที่เข้มงวดมาก การลบตารางแบบกำหนดเองควรทำเมื่อปลั๊กอินถูกลบออก ไม่ใช่เมื่อปิดการใช้งาน เพราะผู้ใช้อาจเพียงแค่ปิดการใช้งานปลั๊กอินชั่วคราว คุณสามารถทำได้ใน uninstall.php เขียนตรรกะการล้างข้อมูลในไฟล์ ไฟล์นี้จะถูกดำเนินการเฉพาะเมื่อผู้ใช้คลิก “ลบ” ปลั๊กอินผ่าน WordPress แดชบอร์ด เพื่อป้องกันการลบข้อมูลผู้ใช้โดยไม่ได้ตั้งใจ