คู่มือเริ่มต้นการพัฒนา WordPress Plugin

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

คู่มือเริ่มต้นการพัฒนา WordPress Plugin

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

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

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

ปลั๊กอิน WordPress ทุกตัวต้องมีไฟล์หลัก ซึ่งเป็นจุดเริ่มต้นของปลั๊กอิน ไฟล์นี้มีข้อมูลเมตาของปลั๊กอิน และรับผิดชอบในการเริ่มต้นฟังก์ชันหลักของปลั๊กอิน

แนะนำให้อ่าน คู่มือการพัฒนา WordPress Plugin ฉบับสมบูรณ์: จากพื้นฐานสู่การเผยแพร่

โครงสร้างของไฟล์หลักปลั๊กอิน

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

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

ในส่วนหัวนี้ “Plugin Name” เป็นข้อมูลที่จำเป็น WordPress ใช้ข้อมูลนี้เพื่อระบุและแสดงปลั๊กอินของคุณในหน้าจอจัดการหลังบ้าน ข้อมูลอื่น ๆ เช่น หมายเลขรุ่น คำอธิบาย ช่วยให้ผู้ใช้เข้าใจรายละเอียดของปลั๊กอิน

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

ดำเนินการฟังก์ชันการทำงานง่ายๆ

ต่อไปนี้เป็นตัวอย่างไฟล์หลักของปลั๊กอินที่สมบูรณ์ ซึ่งดำเนินการเพิ่มข้อความที่ด้านล่างของหน้า:

&lt;?php
/**
 * Plugin Name: 页脚问候插件
 */
// 防止直接访问文件
if ( ! defined( &#039;ABSPATH&#039; ) ) {
	exit;
}

/**
 * 在网站页脚输出一条自定义问候语
 */
function myplugin_add_footer_text() {
	echo &#039;<p style="text-align:center;">ขอบคุณที่เยี่ยมชมเว็บไซต์ของเรา!</p>';
}
// 将函数挂载到`wp_footer`钩子上
add_action( 'wp_footer', 'myplugin_add_footer_text' );

ในโค้ดนี้myplugin_add_footer_text คือฟังก์ชันที่เรากำหนดไว้ ซึ่งดำเนินการดำเนินการส่งออกที่เฉพาะเจาะจงadd_action() เป็นฟังก์ชันของ WordPress ที่จะ “เชื่อมต่อ” ฟังก์ชันการทำงานของเราเข้ากับจุด wp_footer ดำเนินการของ WordPress Core ดังนั้นเมื่อใดก็ตามที่ WordPress ดำเนินการไปถึงส่วนท้ายของหน้า ฟังก์ชันของเราก็จะถูกเรียกใช้โดยอัตโนมัติ

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

เข้าใจกลไก Hook ของ WordPress

Hook (Hooks) เป็นหัวใจและจิตวิญญาณของการพัฒนา WordPress Plugin ซึ่งให้ความสามารถในการแก้ไขหรือขยายฟังก์ชันหลักของ WordPress Hook แบ่งออกเป็นสองประเภทหลัก: Action Hooks และ Filter Hooks

การใช้งานของ Action Hook

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

ตัวอย่างต่อไปนี้แสดงวิธีการเพิ่มข้อความลิขสิทธิ์โดยอัตโนมัติหลังเนื้อหาบทความ:

hosting.com 共享主机
高性能,配备 AMD EPYC CPU、NVMe SSD 存储和 LiteSpeed,全天候24小时、全天候的专家内部支持,高级安全措施,包括 SSL、暴力破解、恶意软件和 DDoS 防护,节省高达 73%
function myplugin_add_post_copyright( $content ) {
	if ( is_single() ) {
		$copyright = '<div class="post-copyright"><p>เนื้อหานี้เป็นผลงานต้นฉบับ โปรดระบุแหล่งที่มาเมื่อนำไปใช้ใหม่</p></div>';
		$content .= $copyright;
	}
	return $content;
}
add_filter( 'the_content', 'myplugin_add_post_copyright' );

โปรดทราบว่าเราใช้ add_filter() แทนที่จะเป็น add_action()ที่นี่ เนื่องจากการแก้ไขเนื้อหาบทความถือเป็นพฤติกรรม “การกรอง” ซึ่งนำไปสู่การแนะนำของฮุกอีกประเภทหนึ่งที่สำคัญ

ฟังก์ชันของฮุกตัวกรอง

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

ตัวอย่างด้านล่างนี้แสดงวิธีการใช้ตัวกรองเพื่อปรับเปลี่ยนความยาวของบทคัดย่อบทความ:

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

function myplugin_custom_excerpt_length( $length ) {
	// 将默认的55个词改为20个词
	return 20;
}
add_filter( 'excerpt_length', 'myplugin_custom_excerpt_length' );

ในตัวอย่างนี้ ฟังก์ชันของเรา myplugin_custom_excerpt_length รับค่าความยาวของข้อความสรุปเริ่มต้นและส่งคืนค่าใหม่ที่เรากำหนดเอง หลังจากนั้น WordPress จะใช้ค่านี้ในการสร้างข้อความสรุป

การทำให้ปลั๊กอินเป็นสากลและโดเมนข้อความ

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

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

โหลดโดเมนข้อความของปลั๊กอิน

ขั้นตอนแรกในการทำให้เป็นสากลคือการตั้งค่าโดเมนข้อความ (Text Domain) ในปลั๊กอินให้ถูกต้อง และโหลดไฟล์แปลในเวลาที่เหมาะสม โดเมนข้อความต้องตรงกับ “Text Domain” ที่กำหนดในส่วนหัวความคิดเห็นของไฟล์หลักของปลั๊กอินโดยสมบูรณ์

โดยปกติเราจะใช้ฟังก์ชัน 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' );

โค้ดนี้กำหนดฟังก์ชัน myplugin_load_textdomainและใช้ add_action เพื่อติดตั้งมันลงบน plugins_loaded บน hook ซึ่งช่วยให้มั่นใจว่าไฟล์แปลถูกโหลดก่อนที่โค้ดการทำงานของปลั๊กอินจะทำงาน โดยพารามิเตอร์ที่สามระบุเส้นทางของไฟล์ภาษา (.mo) ซึ่งมักจะอยู่ในไดเรกทอรีของปลั๊กอิน languages ในโฟลเดอร์

ใช้ฟังก์ชันการแปลเพื่อห่อหุ้มสตริง

ในโค้ดปลั๊กอิน สตริงทั้งหมดที่ต้องแปลสำหรับผู้ใช้ ต้องถูกห่อหุ้มด้วยฟังก์ชันเฉพาะ โดยฟังก์ชันที่ใช้บ่อยที่สุดคือ __()_e()

__() ฟังก์ชันส่งกลับสตริงที่แปลแล้ว ในขณะที่ _e() 函数则直接将其输出(echo)。在之前添加页脚文本的例子中,我们应该这样写以支持翻译:

function myplugin_add_footer_text() {
	$text = __( '感谢您访问本网站!', 'my-first-plugin' );
	echo '<p style="text-align:center;">' . esc_html( $text ) . '</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' );

ที่นี่ สตริง “ขอบคุณที่เยี่ยมชมเว็บไซต์ของเรา!” ถูก __() ห่อหุ้มด้วยฟังก์ชัน และระบุโดเมนข้อความ my-first-pluginผู้แปลสามารถสร้างไฟล์แปลสำหรับสตริงนี้ในภาษาต่าง ๆ ได้ พร้อมกันนี้ เราใช้ esc_html() ฟังก์ชันสำหรับหนีผลลัพธ์ นี่คือการปฏิบัติด้านความปลอดภัยที่สำคัญ

ความปลอดภัยของปลั๊กอินและแนวทางปฏิบัติที่ดีที่สุด

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

การตรวจสอบความถูกต้องของข้อมูล การหลีกเลี่ยง และการทำความสะอาดข้อมูล

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

สำหรับข้อมูลที่ส่งออกไปยังหน้า HTML ให้ใช้ฟังก์ชันหนีของ WordPress เช่น esc_html(), esc_attr(), esc_url()สำหรับข้อมูลที่จะถูกบันทึกลงในฐานข้อมูล ให้ใช้ wp_strip_all_tags()sanitize_text_field() เพื่อทำความสะอาด ตัวอย่างต่อไปนี้แสดงวิธีที่ปลอดภัยในการประมวลผลข้อมูลจากฟอร์ม:

// 假设我们接收一个名为`user_bio`的POST字段
$raw_bio = $_POST['user_bio'] ?? ''; // 使用空合并运算符提供默认值
// 清理数据:移除标签,清理额外空格和特殊字符
$clean_bio = sanitize_textarea_field( $raw_bio );
// 在存入数据库前,还可以使用`wp_kses_post`允许安全的HTML标签
$safe_bio_for_db = wp_kses_post( $clean_bio );
// 现在$safe_bio_for_db可以安全地存入数据库了

ใช้การตรวจสอบ nonce และสิทธิ์

หากปลั๊กอินของคุณมีอินเทอร์เฟซผู้ดูแลระบบหรือจัดการการส่งฟอร์ม คุณต้องใช้กลไก nonce (Number used once) ของ WordPress เพื่อป้องกันการโจมตีแบบ Cross-Site Request Forgery (CSRF) พร้อมทั้งใช้การตรวจสอบความสามารถ (Capability Checks) เพื่อให้แน่ใจว่าผู้ใช้ปัจจุบันมีสิทธิ์ในการดำเนินการ

เมื่อสร้างเมนูผู้ดูแลระบบหรือฟอร์ม ให้สร้างฟิลด์ nonce:

// 在表单中输出一个非ce字段
wp_nonce_field( 'myplugin_save_action', 'myplugin_nonce_field' );

ในการจัดการการส่งฟอร์ม ตรวจสอบ nonce นี้:

// 验证非ce
if ( ! isset( $_POST['myplugin_nonce_field'] ) || ! wp_verify_nonce( $_POST['myplugin_nonce_field'], 'myplugin_save_action' ) ) {
	wp_die( __( '安全校验失败,操作已终止。', 'my-first-plugin' ) );
}
// 检查用户权限(例如,检查是否有`manage_options`权限)
if ( ! current_user_can( 'manage_options' ) ) {
	wp_die( __( '您没有执行此操作的权限。', 'my-first-plugin' ) );
}
// 通过所有安全检查,开始处理数据...

การปฏิบัติตามหลักความปลอดภัยเหล่านี้เป็นพื้นฐานในการสร้างปลั๊กอินที่น่าเชื่อถือ

สรุป

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

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

ปลั๊กอิน WordPress อย่างน้อยต้องมีไฟล์กี่ไฟล์?

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

ฉันควรเขียนโค้ดปลั๊กอินลงในไฟล์ functions.php ของธีมโดยตรงหรือไม่?

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

จะสร้างหน้าตั้งค่าผู้ดูแลสำหรับปลั๊กอินของฉันได้อย่างไร

คุณสามารถใช้ฟังก์ชันที่ WordPress จัดเตรียมไว้เพื่อเพิ่มเมนูและหน้าจัดการ ฟังก์ชันที่ใช้บ่อยที่สุดคือ add_menu_page()add_options_page() ฟังก์ชัน คุณจำเป็นต้องสร้าง callback function เพื่อแสดงเนื้อหา HTML ของหน้า และจัดการการส่งฟอร์ม (รวมถึงการตรวจสอบ nonce และการตรวจสอบสิทธิ์) โดยทั่วไป กระบวนการนี้จะเกี่ยวข้องกับการใช้ WordPress Settings API ซึ่งสามารถช่วยให้คุณสร้างและจัดการตัวเลือกการตั้งค่าได้อย่างเป็นมาตรฐานและปลอดภัยมากขึ้น

เมื่อพัฒนา plugin ควรทำการดีบักและบันทึกข้อผิดพลาดอย่างไร

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