คู่มือขั้นสูงสุดในการพัฒนา WordPress Plugin: สร้างปลั๊กอินแรกของคุณตั้งแต่เริ่มต้น

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

การเตรียมการและการตั้งค่าสภาพแวดล้อม

ก่อนเริ่มเขียนโค้ด คุณต้องมีสภาพแวดล้อมการพัฒนาที่เหมาะสม ซึ่งรวมถึงการติดตั้ง WordPress ในเครื่อง, ตัวแก้ไขโค้ด และความรู้พื้นฐาน PHP แนะนำให้ใช้ XAMPP, MAMP หรือ Local by Flywheel เพื่อตั้งค่าสภาพแวดล้อม WordPress ในเครื่องอย่างรวดเร็ว ตรวจสอบให้แน่ใจว่าเวอร์ชัน PHP ของคุณตรงตามข้อกำหนดอย่างเป็นทางการของ WordPress โดยทั่วไปคือ PHP 7.4 หรือสูงกว่า

ปลั๊กอินโดยพื้นฐานคือไฟล์ PHP หนึ่งไฟล์หรือมากกว่า ที่วางอยู่ในไดเรกทอรีwp-content/pluginsของ WordPress ปลั๊กอินแต่ละตัวต้องมีชื่อที่ไม่ซ้ำกัน และไฟล์หลักต้องมีข้อมูลความคิดเห็นของปลั๊กอินที่เป็นมาตรฐานในส่วนหัว ซึ่งเป็นพื้นฐานที่ WordPress ใช้ในการระบุปลั๊กอิน

สร้างไฟล์ปลั๊กอินแรกของคุณ

ก่อนอื่นในwp-content/pluginsสร้างโฟลเดอร์ใหม่ในไดเรกทอรี เช่นmy-first-pluginจากนั้นสร้างไฟล์ PHP หลักภายในโฟลเดอร์นั้น โดยปกติจะใช้ชื่อเดียวกับโฟลเดอร์:my-first-plugin.phpในไฟล์นี้ คุณต้องเขียนข้อมูลส่วนหัวของปลั๊กอิน

แนะนำให้อ่าน คู่มือการพัฒนา WordPress 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
 */

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

UltaHost WordPress โฮสติ้ง
การรับประกันคืนเงินภายใน 30 วัน, แบนด์วิธและฐานข้อมูลไม่จำกัด, การป้องกัน DDoS ฟรี, ซื้อ 3 ปีลดราคา 50%

การทำความเข้าใจกลไกหลักของ WordPress: ฮุคและตัวกรอง

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

ฮุคแอ็กชันอนุญาตให้คุณแทรกและดำเนินการโค้ดของคุณเองในจุดเวลาที่เฉพาะเจาะจง (เช่น การเผยแพร่บทความ การโหลดหน้าเว็บ เป็นต้น) ตัวอย่างเช่น การส่งอีเมลเมื่อมีการเผยแพร่บทความ คุณสามารถใช้add_action()ฟังก์ชันนี้จะติดตั้งฟังก์ชันที่คุณกำหนดเองเข้ากับฮุคแอ็กชันที่ระบุ

ฮุคตัวกรองอนุญาตให้คุณปรับเปลี่ยนข้อมูล ก่อนที่ข้อมูลจะถูกใช้งาน (เช่น บันทึกลงฐานข้อมูลหรือแสดงในเบราว์เซอร์) คุณสามารถดักจับและแก้ไขได้ ตัวอย่างเช่น การแก้ไขหัวข้อบทความหรือเนื้อหาความคิดเห็น คุณสามารถใช้add_filter()ฟังก์ชันเพื่อใช้ตัวกรอง

ใช้ Action Hook เพื่อเพิ่มฟังก์ชันการทำงาน

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

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

// 定义一个在管理后台页脚显示信息的函数
function myplugin_display_admin_footer_text() {
    echo '<p>ขอบคุณที่ใช้ “ปลั๊กอินแรกของฉัน”</p>';
}
// 将函数挂载到 admin_footer 动作钩子
add_action( 'admin_footer', 'myplugin_display_admin_footer_text' );

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

ใช้ Filter Hook เพื่อปรับเปลี่ยนเนื้อหา

ตอนนี้ ลองมาแก้ไขหัวข้อของบทความทั้งหมด โดยเพิ่มสัญลักษณ์เครื่องหมายการค้า (™) ที่ท้ายหัวข้อทุกบทความ เราสามารถใช้the_titleตัวกรอง

// 定义一个修改文章标题的函数
function myplugin_modify_post_title( $title, $post_id ) {
    // 确保只在主循环且非管理后台中修改
    if ( ! is_admin() && in_the_loop() ) {
        $title = $title . ' ™';
    }
    return $title;
}
// 将函数挂载到 the_title 过滤器钩子,参数2表示接受2个参数
add_filter( 'the_title', 'myplugin_modify_post_title', 10, 2 );

โค้ดนี้จะตรวจสอบว่าปัจจุบันอยู่ในลูปหลักของบทความที่หน้าเว็บหรือไม่ ถ้าใช่ จะเพิ่มสัญลักษณ์ “™” หลังหัวข้อ10คือลำดับความสำคัญ (ตัวเลขน้อยกว่าจะดำเนินการก่อน)2หมายถึงฟังก์ชันของเรารับพารามิเตอร์สองตัว (ต้นฉบับ$title$post_id)。

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

สร้างฟังก์ชันปลั๊กอิน: สร้างเมนูการจัดการและหน้าตั้งค่า

ปลั๊กอินที่สมบูรณ์มักต้องการให้มีตัวเลือกการกำหนดค่าในแอดมินของ WordPress ซึ่งเกี่ยวข้องกับการสร้างหน้าเมนูการจัดการเฉพาะสำหรับปลั๊กอิน WordPress มีฟังก์ชัน API ที่หลากหลายเพื่อรองรับฟังก์ชันนี้ เช่นadd_menu_page()add_options_page()

เพิ่มเมนูการจัดการระดับบนสุด

เราจะเพิ่มเมนูระดับบนสุดแยกต่างหากสำหรับปลั๊กอิน ซึ่งมักจะทำในadmin_menuฮุกแอ็กชัน เราจะสร้างฟังก์ชันเพื่อกำหนดเมนูและหน้า

// 定义添加管理菜单的函数
function myplugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置',           // 页面标题
        '我的插件',               // 菜单标题
        'manage_options',         // 所需权限(管理员)
        'myplugin-settings-page', // 菜单slug(唯一标识)
        'myplugin_display_settings_page', // 用于显示页面内容的回调函数
        'dashicons-admin-generic', // 菜单图标(Dashicons)
        30                        // 菜单位置
    );
}
// 将函数挂载到 admin_menu 钩子
add_action( ‘admin_menu’, ‘myplugin_add_admin_menu’ );

ต่อไป เราจำเป็นต้องกำหนดฟังก์ชัน callbackmyplugin_display_settings_page()เพื่อแสดงเนื้อหา HTML ของหน้าการตั้งค่า

แนะนำให้อ่าน การพัฒนา WordPress Plugin จากเริ่มต้นสู่ระดับเชี่ยวชาญ: คู่มือฉบับสมบูรณ์สำหรับการสร้างฟังก์ชันที่กำหนดเองเอง

// 定义设置页面的显示内容
function myplugin_display_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1>การตั้งค่าปลั๊กอินของฉัน</h1>
        <form method="post" action="/th/options.php/" data-trp-original-action="options.php">
            <?php
            // 输出设置字段、安全nonce等
            settings_fields( ‘myplugin_settings_group’ );
            do_settings_sections( ‘myplugin-settings-page’ );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="th"/></form>
    </div>
    &lt;?php
}

ลงทะเบียนการตั้งค่า, ฟิลด์, และส่วน

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

// 初始化插件设置
function myplugin_settings_init() {
    // 1. 注册一个设置(存储在wp_options表中)
    register_setting(
        ‘myplugin_settings_group’, // 设置组名,与 settings_fields() 对应
        ‘myplugin_options’ // 存储在数据库中的选项名
    );

// 2. 添加一个设置分区
    add_settings_section(
        ‘myplugin_section_basic’, // 分区ID
        ‘基础设置’, // 分区标题
        ‘myplugin_section_basic_callback’, // 分区介绍的回调函数
        ‘myplugin-settings-page’ // 所属页面的slug
    );

// 3. 为分区添加一个字段
    add_settings_field(
        ‘myplugin_field_message’, // 字段ID
        ‘欢迎信息’, // 字段标签
        ‘myplugin_field_message_callback’, // 渲染字段HTML的回调函数
        ‘myplugin-settings-page’, // 所属页面的slug
        ‘myplugin_section_basic’ // 所属分区的ID
    );
}
add_action( ‘admin_init’, ‘myplugin_settings_init’ );

// 分区介绍的回调函数
function myplugin_section_basic_callback() {
    echo ‘<p>ตั้งค่าข้อมูลพื้นฐานของปลั๊กอิน</p>’;
}

// 字段渲染的回调函数
function myplugin_field_message_callback() {
    // 从数据库获取现有值
    $options = get_option( ‘myplugin_options’ );
    $value = $options[‘message’] ?? ‘’; // PHP 7.0+ 空合并运算符
    // 输出输入框
    echo ‘<input type="“text”" name="“myplugin_options[message]”" value="“‘" . esc_attr( $value ) ‘” class ="“regular-text”" />‘;
}

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

โฮสติ้งแบบแชร์ของ InterServer
共享主机每月 $2.50 USD , 首月 $0.1 USD 优惠码 tryinterserver, 461个云应用脚本,一键安装。

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

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

การทำให้ข้อความเป็นสากล

WordPress ใช้__()_e()ใช้ฟังก์ชันเพื่อดำเนินการแปล ก่อนอื่นคุณต้องตรวจสอบให้แน่ใจว่าตั้งค่าในส่วนหัวของปลั๊กอินอย่างถูกต้องText Domain(ตัวอย่าง:my-first-plugin). จากนั้นห่อหุ้มสตริงทั้งหมดที่มุ่งเป้าไปที่ผู้ใช้ด้วยฟังก์ชันแปล

// 在插件代码中,将硬编码的文本替换
// 修改前:echo ‘<p>ขอบคุณที่ใช้ “ปลั๊กอินแรกของฉัน”</p>’;
// 修改后:
function myplugin_display_admin_footer_text() {
    echo ‘<p>‘ . esc_html__( ‘感谢使用“我的第一个插件”!’, ‘my-first-plugin’ ) . ‘</p>’;
}

ต่อไปคุณต้องใช้เครื่องมือเช่น Poedit เพื่อสร้าง.pot(เทมเพลต) ไฟล์ วางไว้ในปลั๊กอินlanguagesโฟลเดอร์ ผู้แปลสามารถสร้าง.poและไฟล์ที่คอมไพล์แล้ว.moไฟล์ สุดท้าย ใช้ในระหว่างการเริ่มต้นปลั๊กอินload_plugin_textdomain()ฟังก์ชันโหลดการแปล

function myplugin_load_textdomain() {
    load_plugin_textdomain( ‘my-first-plugin’, false, dirname( plugin_basename( __FILE__ ) ) . ‘/languages/’ );
}
add_action( ‘plugins_loaded’, ‘myplugin_load_textdomain’ );

ปฏิบัติตามมาตรฐานการเข้ารหัสที่ปลอดภัย

ความปลอดภัยเป็นสิ่งสำคัญอันดับแรก ก่อนอื่น อย่าไว้ใจข้อมูลที่ผู้ใช้ป้อนเข้าทุกข้อมูลที่มาจากผู้ใช้หรือแหล่งภายนอก (เช่น$_GET$_POST$_COOKIE) ต้องได้รับการตรวจสอบ ทำความสะอาด และหลีกหนี

  • การหนีออก: เมื่อส่งข้อมูลออกไปยัง HTML, JavaScript หรือ URL ให้ใช้ฟังก์ชันการหนีที่เหมาะสม
    // 输出到HTML属性
    echo ‘<input value="“‘" . esc_attr( $value ) ‘“ />‘;
    // 输出到HTML内容
    echo ‘<p>‘ . esc_html( $text ) . ‘</p>’;
    // 输出到JavaScript变量
    echo ‘<script>var msg = “‘ . esc_js( $message ) . ‘“;</script>’;
    // 输出到URL
    echo ‘<a href="/th/“‘/" . esc_url( $url ) ‘“>ลิงก์</a>’;
  • การตรวจสอบข้อมูลเข้า: ตรวจสอบว่าข้อมูลตรงกับรูปแบบที่คาดหวังหรือไม่ (เช่น เป็นอีเมล, ตัวเลข ฯลฯ)
    if ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
        // 不是有效的邮箱地址
        wp_die( ‘无效的邮箱格式。’ );
    }
  • การตรวจสอบความสามารถ: ก่อนดำเนินการจัดการ ตรวจสอบว่าผู้ใช้ปัจจุบันมีสิทธิ์ที่เกี่ยวข้องหรือไม่
    if ( ! current_user_can( ‘manage_options’ ) ) {
        wp_die( ‘你没有执行此操作的权限。’ );
    }
  • การตรวจสอบ Nonce: สำหรับการดำเนินการที่เกี่ยวข้องกับการเปลี่ยนแปลงสถานะ (เช่น การส่งแบบฟอร์ม, คำขอ AJAX) ให้ใช้ Nonce (ตัวเลขใช้ครั้งเดียว) เพื่อป้องกันการโจมตีแบบข้ามไซต์ (CSRF)
    // 在表单中输出nonce字段
    wp_nonce_field( ‘myplugin_action’, ‘myplugin_nonce’ );
    // 在处理请求时验证nonce
    if ( ! isset( $_POST[‘myplugin_nonce’] ) || ! wp_verify_nonce( $_POST[‘myplugin_nonce’], ‘myplugin_action’ ) ) {
        wp_die( ‘安全校验失败。’ );
    }

สรุป

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

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

### การพัฒนา WordPress ปลั๊กอินต้องมีความรู้พื้นฐานใดบ้าง
คุณต้องมีความรู้พื้นฐานในการเขียนโปรแกรม PHP ความเข้าใจเกี่ยวกับ HTML, CSS และ JavaScript (โดยเฉพาะ jQuery) ก็จะช่วยได้มาก ที่สำคัญที่สุดคือต้องมีความเข้าใจเบื้องต้นเกี่ยวกับโครงสร้างพื้นฐานของ WordPress เช่น แนวคิดเกี่ยวกับธีม ปลั๊กอิน ประเภทโพสต์ บทบาทผู้ใช้ เป็นต้น คู่มือนี้ถือว่าคุณมีความรู้พื้นฐานเหล่านี้อยู่แล้ว

วิธีดีบัก WordPress Plugin ของฉัน?

ก่อนอื่น ตรวจสอบให้แน่ใจว่าในไฟล์wp-config.phpไฟล์ในWP_DEBUGเป็นtrueซึ่งจะแสดงข้อผิดพลาด คำเตือน และการแจ้งเตือนของ PHP บนหน้าเว็บ ประการที่สอง สามารถใช้error_log()ฟังก์ชันจะเขียนข้อมูลดีบักไปยังบันทึกข้อผิดพลาดของเซิร์ฟเวอร์ สำหรับการดีบักที่ซับซ้อนมากขึ้น สามารถพิจารณาใช้ปลั๊กอินดีบักเฉพาะทาง เช่น Query Monitor ซึ่งสามารถดูรายละเอียดต่างๆ เช่น การสืบค้นฐานข้อมูล การดำเนินการของฮุก การโหลดสคริปต์ เป็นต้น

ฉันควรแจกจ่ายปลั๊กอินที่ฉันพัฒนาอย่างไร?

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

ฉันจะเพิ่มประเภทโพสต์หรืออนุกรมวิธานที่กำหนดเองให้กับปลั๊กอินของฉันได้อย่างไร?

คุณสามารถใช้register_post_type()ฟังก์ชันเพื่อสร้างประเภทบทความที่กำหนดเอง (CPT) ใช้register_taxonomy()ฟังก์ชันเพื่อสร้างระบบจัดหมวดหมู่ที่กำหนดเอง การดำเนินการเหล่านี้ควรดำเนินการในinitฮุคแอ็กชัน WordPress Codex และคู่มือนักพัฒนามีคำอธิบายพารามิเตอร์โดยละเอียดเกี่ยวกับฟังก์ชันทั้งสองนี้ ซึ่งเป็นวิธีที่มีประสิทธิภาพในการขยายความสามารถในการจัดการเนื้อหาของ WordPress

ชื่อฟังก์ชันในปลั๊กอินควรหลีกเลี่ยงการขัดแย้งกับปลั๊กอินอื่นได้อย่างไร?

เพื่อป้องกันการขัดชื่อฟังก์ชัน ชื่อคลาส หรือชื่อค่าคงที่ วิธีปฏิบัติที่ดีที่สุดคือการใช้เนมสเปซ (PHP 5.3+) หากปลั๊กอินของคุณต้องการรองรับสภาพแวดล้อม PHP ที่เก่ากว่า หรือคุณต้องการรักษาความเข้ากันได้สูงสุด คุณสามารถใช้วิธีการเพิ่มคำนำหน้าที่ไม่ซ้ำสำหรับตัวระบุทั้งหมดได้ ตัวอย่างเช่น ใช้ชื่อปลั๊กอินหรือตัวย่อเป็นคำนำหน้า เช่นmyplugin_function_nameMyPlugin_ClassNameMYPLUGIN_CONSTANTตัวอย่างโค้ดในคู่มือนี้ใช้วิธีการเพิ่มคำนำหน้าทั้งหมด