WordPress Plugin Development Beginner's Guide: Creating Your First Custom Plugin from Scratch

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

ทำไมต้องพัฒนา WordPress Plugin ของตัวเอง

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

สำหรับนักพัฒนา การเรียนรู้การพัฒนา Plugin เป็นเส้นทางที่ยอดเยี่ยมในการทำความเข้าใจโครงสร้างของ WordPress อย่างลึกซึ้ง คุณจะได้สัมผัสกับ Action Hookadd_action, Filter Hookadd_filter、รหัสสั้นadd_shortcodeแนวคิดหลักเหล่านี้ การเข้าใจความรู้เหล่านี้ไม่เพียงแต่ช่วยให้คุณสามารถสร้างปลั๊กอินได้เท่านั้น แต่ยังช่วยให้คุณปรับแต่งธีมและปลั๊กอินที่มีอยู่ได้อย่างมีประสิทธิภาพมากขึ้นอีกด้วย

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

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

แนะนำให้อ่าน WordPress Plugin Development from Beginner to Expert: Sharing Practical Experience and Core Techniques

การติดตั้งสภาพแวดล้อมการพัฒนาท้องถิ่น

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

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

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

ทำความรู้จักกับโครงสร้างพื้นฐานของปลั๊กอิน

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

ต่อไปนี้เป็นตัวอย่างไฟล์หลักของปลั๊กอินแบบย่อ ไฟล์สามารถตั้งชื่อเป็นmy-first-plugin.phpและวางไว้ในโฟลเดอร์ที่สร้างขึ้นก่อนหน้านี้:

<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://yourwebsite.com/my-first-plugin
 * Description:       这是一个用于学习的入门级WordPress插件。
 * Version:           1.0.0
 * Author:            你的名字
 * License:           GPL v2 or later
 */

// 防止直接访问此文件
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

ใส่โฟลเดอร์ที่มีไฟล์นี้ลงในwp-content/pluginsหลังจากไดเรกทอรีแล้ว คุณจะเห็นมันในหน้า “ปลั๊กอิน” ในแอดมินของ WordPress และสามารถเปิดใช้งานได้

แนะนำให้อ่าน คู่มือขั้นสูงสุดในการพัฒนา WordPress Plugins: สร้างส่วนขยายฟังก์ชันที่กำหนดเองตั้งแต่เริ่มต้นจนสำเร็จ

สร้างฟังก์ชันหลักแรก

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

การใช้ตัวกรองเพื่อแก้ไขเนื้อหาบทความ

WordPress มีตัวกรองฮุค (Filter Hooks) จำนวนมากที่อนุญาตให้คุณปรับเปลี่ยนข้อมูลก่อนที่จะถูกบันทึกลงในฐานข้อมูลหรือส่งออกไปยังเบราว์เซอร์ หากต้องการแก้ไขเนื้อหาของบทความ เราสามารถใช้the_contentตัวกรอง

ในไฟล์ปลั๊กอินหลักของคุณ หลังจากเปิดใช้งานฮุคแล้ว ให้เพิ่มฟังก์ชันและเรียกใช้ฮุคดังต่อไปนี้:

hosting.com 共享主机
高性能,配备 AMD EPYC CPU、NVMe SSD 存储和 LiteSpeed,全天候24小时、全天候的专家内部支持,高级安全措施,包括 SSL、暴力破解、恶意软件和 DDoS 防护,节省高达 73%
// 定义向文章内容追加文本的函数
function my_first_plugin_add_text_to_content( $content ) {
    // 确保只在主循环的单篇文章页面执行
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $additional_text = '<p><em>ขอบคุณที่อ่านบทความนี้! บทความนี้สนับสนุนโดย “ปลั๊กอินแรกของฉัน”</em></p>';
        $content .= $additional_text;
    }
    return $content;
}
// 将函数挂载到‘the_content’过滤器上
add_filter( 'the_content', 'my_first_plugin_add_text_to_content' );

ฟังก์ชันนี้เริ่มต้นด้วยการตรวจสอบเงื่อนไขต่างๆ เพื่อให้แน่ใจว่าข้อความเพิ่มเติมจะปรากฏเฉพาะในหน้าเนื้อหาบทความเท่านั้น และจะไม่ส่งผลต่อหน้าหลัก หน้ารวม หรือหน้าเพจ จากนั้นจะเพิ่มย่อหน้า HTML ที่กำหนดเองลงในเนื้อหาดั้งเดิม$contentตัวแปร และส่งคืนเนื้อหาที่ถูกปรับเปลี่ยนแล้ว

สร้างหน้าการตั้งค่าการจัดการแบบง่าย

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

ก่อนอื่น ใช้add_actionฮุคเพื่อเพิ่มเมนูย่อยในเมนูแอดมิน:

แนะนำให้อ่าน เชี่ยวชาญการพัฒนา WordPress Plugin: สร้าง Plugin แบบกำหนดเองตัวแรกของคุณตั้งแต่เริ่มต้น

// 创建管理菜单
function my_first_plugin_add_admin_menu() {
    add_options_page(
        '我的第一个插件设置', // 页面标题
        '我的插件设置',       // 菜单标题
        'manage_options',     // 所需权限
        'my-first-plugin',    // 菜单slug
        'my_first_plugin_settings_page' // 显示页面的回调函数
    );
}
add_action( 'admin_menu', 'my_first_plugin_add_admin_menu' );

จากนั้น กำหนดฟังก์ชันคอลแบ็กสำหรับแสดงหน้าตั้งค่าmy_first_plugin_settings_pageและจัดการตรรกะการบันทึกแบบฟอร์ม:

// 设置页面的HTML内容
function my_first_plugin_settings_page() {
    ?&gt;
    <div class="wrap">
        <h2>การตั้งค่าปลั๊กอินแรกของฉัน</h2>
        <form method="post" action="/th/options.php/" data-trp-original-action="options.php">
            <?php
            settings_fields( 'my_first_plugin_settings_group' );
            do_settings_sections( 'my-first-plugin' );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="th"/></form>
    </div>
    &lt;?php
}

// 注册设置、区域和字段
function my_first_plugin_settings_init() {
    register_setting( &#039;my_first_plugin_settings_group&#039;, &#039;my_first_plugin_custom_text&#039; );

add_settings_section(
        &#039;my_first_plugin_section&#039;,
        &#039;自定义文本设置&#039;,
        null,
        &#039;my-first-plugin&#039;
    );

add_settings_field(
        &#039;my_first_plugin_text_field&#039;,
        &#039;要在文末添加的文本&#039;,
        &#039;my_first_plugin_text_field_render&#039;,
        &#039;my-first-plugin&#039;,
        &#039;my_first_plugin_section&#039;
    );
}
add_action( &#039;admin_init&#039;, &#039;my_first_plugin_settings_init&#039; );

// 渲染文本输入字段
function my_first_plugin_text_field_render() {
    $option = get_option( &#039;my_first_plugin_custom_text&#039;, &#039;感谢您阅读这篇文章!本文由“我的第一个插件”提供支持。&#039; );
    echo &#039;<textarea name="my_first_plugin_custom_text" rows="3" cols="50">' . esc_textarea( $option ) . '</textarea>';
}

สุดท้าย ให้แก้ไขฟังก์ชันที่เพิ่มข้อความก่อนการแก้ไข เพื่อให้อ่านเนื้อหาจากตัวเลือกmy_first_plugin_custom_textใน:

โฮสติ้งแบบแชร์ของ InterServer
共享主机每月 $2.50 USD , 首月 $0.1 USD 优惠码 tryinterserver, 461个云应用脚本,一键安装。
function my_first_plugin_add_text_to_content( $content ) {
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $custom_text = get_option( 'my_first_plugin_custom_text', '' );
        if ( ! empty( $custom_text ) ) {
            $additional_text = '<p><em>' . wp_kses_post( $ข้อความที่ปรับแต่งเอง ) . '</em></p>';
            $content .= $additional_text;
        }
    }
    return $content;
}

ความปลอดภัย การปรับปรุง และการเตรียมการแจกจ่ายปลั๊กอิน

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

การตรวจสอบข้อมูล การหลีกหนี และความปลอดภัย

ความปลอดภัยคือเส้นชีวิตของการพัฒนาโปรแกรมเสริม อย่าเชื่อถือข้อมูลจากผู้ใช้หรือข้อมูลที่ดึงออกจากฐานข้อมูลโดยตรง เมื่อนำข้อมูลออกไปยังหน้าเว็บ ต้องทำการหนีอักขระ ในโค้ดก่อนหน้านี้ เราใช้esc_textarea()ในการหนีอักขระผลลัพธ์ในหน้าจัดการ และใช้wp_kses_post()ในการกรอง HTML ในหน้าบทความ ซึ่งอนุญาตเฉพาะแท็กเนื้อหาที่ปลอดภัยผ่าน สำหรับการประมวลผลฟอร์ม ควรใช้ฟังก์ชันที่ WordPress จัดเตรียมไว้ เช่น การตรวจสอบ nonce การตรวจสอบสิทธิ์ และsanitize_text_field()ในการทำความสะอาดข้อมูล

การจัดระเบียบโค้ดและการปรับปรุงประสิทธิภาพ

เมื่อฟังก์ชันของปลั๊กอินเพิ่มขึ้น การเขียนโค้ดทั้งหมดในไฟล์หลักเดียวจะทำให้จัดการได้ยาก วิธีที่ดีคือการแยกโค้ดตามฟังก์ชันไปยังไฟล์ต่างๆ ตัวอย่างเช่น คุณสามารถสร้างincludes/admin/ไดเรกทอรีเพื่อเก็บโค้ดทั้งหมดที่เกี่ยวข้องกับแอดมินincludes/public/ไดเรกทอรีเพื่อเก็บโค้ดฟังก์ชันส่วนหน้าincludes/class-*.phpเก็บคำนิยามคลาส

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

เตรียมปล่อยปลั๊กอินของคุณ

หากคุณวางแผนที่จะปล่อยปลั๊กอินไปยังไดเรกทอรีปลั๊กอินอย่างเป็นทางการของ WordPress หรือให้ผู้อื่นใช้งานมากขึ้น คุณจำเป็นต้องปรับปรุงหลายด้าน ประการแรก ตรวจสอบให้แน่ใจว่าข้อมูลความคิดเห็นส่วนหัวของปลั๊กอินสมบูรณ์และถูกต้อง ประการที่สอง เขียนไฟล์readme.txtที่ชัดเจน ปฏิบัติตามข้อกำหนดรูปแบบอย่างเป็นทางการของ WordPress อธิบายฟังก์ชันการทำงานของปลั๊กอิน ขั้นตอนการติดตั้ง คำถามที่พบบ่อย ฯลฯ สุดท้าย ทดสอบอย่างละเอียด รวมถึงการทดสอบความเข้ากันได้กับ PHP เวอร์ชันต่างๆ WordPress เวอร์ชันต่างๆ และเมื่อใช้ร่วมกับธีมและปลั๊กอินยอดนิยมอื่นๆ

สรุป

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

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

การพัฒนา WordPress Plugin ต้องใช้ความรู้พื้นฐานอะไรบ้าง

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

ฟังก์ชันของปลั๊กอินและธีมแตกต่างกันอย่างไร และควรเลือกอย่างไร

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

ฉันสามารถสร้างไฟล์ PHP หลายไฟล์ในปลั๊กอินเดียวได้หรือไม่

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

ฉันจะดีบักปลั๊กอินที่ฉันพัฒนาอย่างไร

วิธีการดีบักที่ใช้กันทั่วไปในการพัฒนา WordPress คือการเปิดใช้งานWP_DEBUGคุณสามารถทำได้ในwp-config.phpในไฟล์, ตั้งค่าdefine( 'WP_DEBUG', true );ของเว็บไซต์ ซึ่งจะแสดงข้อผิดพลาด คำเตือน และการแจ้งเตือนของ PHP บนหน้าจอ วิธีที่ปลอดภัยกว่าคือการตั้งค่าWP_DEBUG_LOGเป็นtrueบันทึกข้อผิดพลาดลงในwp-content/debug.logในไฟล์ นอกจากนี้ การใช้เครื่องมือนักพัฒนาของเบราว์เซอร์และปลั๊กอินดีบัก เช่น Query Monitor ยังสามารถเพิ่มประสิทธิภาพได้อย่างมาก

ปลั๊กอินของฉันต้องรองรับ WordPress รุ่นเก่าแค่ไหน

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