
คุณเคยแก้ CSS หรือเพิ่มโค้ดใน functions.php ของ Theme โดยตรงไหม? ถ้าเคย คุณอาจเจอปัญหาที่น่าปวดใจนี้: อัปเดต Theme แล้วทุกอย่างหายหมด ไม่ว่าจะเป็น CSS ที่ปรับมาหลายชั่วโมง หรือฟีเจอร์ที่เพิ่มเองใน functions.php
Child Theme คือวิธีแก้ปัญหานี้ที่ถูกต้องและเป็นมาตรฐานของ WordPress บทความนี้จะอธิบายว่า Child Theme คืออะไร ทำงานอย่างไร และวิธีสร้างตั้งแต่ต้น
อย่าแก้ไข Parent Theme โดยตรง ถ้าแก้ CSS หรือ PHP ใน Theme หลักโดยตรง การอัปเดต Theme ครั้งถัดไปจะ Overwrite ทุกอย่างที่แก้ไว้ทั้งหมด งานที่ทำมาหลายวันหรือหลายอาทิตย์จะหายในพริบตา
Child Theme คืออะไร
Child Theme คือ Theme ย่อยที่ "สืบทอด" (Inherit) ทุกอย่างจาก Parent Theme (Theme หลัก) แต่มีไฟล์เป็นของตัวเองแยกต่างหาก ทำให้การ Customize ทั้งหมดเก็บอยู่ใน Child Theme ไม่ถูกแตะต้องเมื่อ Parent Theme อัปเดต
หลักการทำงาน: WordPress โหลด Child Theme ก่อน ถ้าหาไฟล์ที่ต้องการไม่เจอใน Child Theme ก็จะดึงจาก Parent Theme แทน ทำให้สามารถ Override เฉพาะส่วนที่ต้องการโดยไม่ต้องคัดลอกทั้ง Theme มา
- เพิ่ม CSS ใน
style.cssของ Child Theme → ทับ Style ของ Parent - เพิ่ม PHP ใน
functions.phpของ Child Theme → ทำงานควบคู่กับ Parent - คัดลอก Template File มาไว้ใน Child Theme → ใช้ Version ของ Child Theme แทน
ทำไมต้องสร้าง Child Theme ก่อน Customize ทุกครั้ง
เหตุผลหลักมี 3 ข้อ:
- อัปเดต Theme ได้อย่างปลอดภัย — Customization ทั้งหมดอยู่ใน Child Theme ไม่หายเมื่อ Parent Theme อัปเดต
- รับ Security Patch จาก Parent Theme — สามารถอัปเดต Parent Theme เพื่อแก้ช่องโหว่ด้าน Security ได้ตลอดเวลาโดยไม่กังวล
- แยก Customization ออกจากโค้ดต้นฉบับ — ง่ายต่อการ Debug, Backup และย้าย เพราะรู้ว่าการแก้ไขทั้งหมดอยู่ที่ไหน
ทำไมต้องใช้ Child Theme — อัปเดต Theme แล้ว Customization ไม่หาย
หัวใจของ Child Theme คือการแยก "งานที่คุณแก้เอง" ออกจาก "โค้ดต้นฉบับของ Theme ผู้พัฒนา" อย่างเด็ดขาด เพื่อให้เข้าใจว่าทำไมเรื่องนี้สำคัญมาก ลองนึกถึงสถานการณ์จริงที่เกิดขึ้นกับเว็บ WordPress ทั่วโลกทุกวัน
สมมติว่าคุณใช้ Theme ยอดนิยมตัวหนึ่ง แล้วใช้เวลาทั้งสุดสัปดาห์ปรับแต่งสีปุ่ม เปลี่ยนฟอนต์ ขยับ Layout ของหน้า Single Post และเพิ่มฟังก์ชันลงทะเบียนสมาชิกพิเศษใน functions.php ของ Theme หลักโดยตรง ทุกอย่างสวยงามและทำงานได้ดี จนกระทั่งสัปดาห์ถัดมา ผู้พัฒนา Theme ปล่อยเวอร์ชันใหม่เพื่อแก้ช่องโหว่ด้านความปลอดภัย คุณเห็นแจ้งเตือนสีแดงในหน้า Admin จึงกด Update ตามปกติ — และในวินาทีนั้นเอง ไฟล์ Theme ทั้งหมดถูกเขียนทับด้วยเวอร์ชันใหม่ งานที่ทำมาทั้งสุดสัปดาห์หายเกลี้ยงในพริบตา
นี่คือเหตุผลที่ Child Theme ไม่ใช่แค่ "ทางเลือก" แต่เป็น "มาตรฐานที่ต้องทำ" ก่อนแก้ไขใดๆ เพราะเมื่อ Customization ทั้งหมดอยู่ใน Child Theme การอัปเดต Parent Theme จะแตะเฉพาะไฟล์ของ Parent เท่านั้น ไม่เคยแตะ Child Theme ของคุณเลย คุณจึงได้รับ Security Patch และฟีเจอร์ใหม่จาก Parent Theme ได้อย่างต่อเนื่อง โดยที่งานปรับแต่งของคุณยังอยู่ครบ
ข้อดีของ Child Theme เมื่อมองในระยะยาว:
- อัปเดตได้อย่างมั่นใจ — ไม่ต้องลังเลว่าจะกด Update ดีไหม เพราะรู้ว่า Customization ปลอดภัยเสมอ
- ย้อนกลับง่าย — ถ้าแก้แล้วเว็บพัง แค่ปิดใช้งาน Child Theme ชั่วคราว เว็บก็กลับมาเหมือน Parent Theme เดิมทันที
- ส่งต่องานง่าย — เมื่อย้ายเว็บไป Hosting ใหม่หรือส่งต่อให้ทีมอื่นดูแล แค่ Copy โฟลเดอร์ Child Theme ไปก็ได้ Customization ครบ
- Debug เร็วขึ้น — เวลาเว็บมีปัญหา รู้ทันทีว่าโค้ดที่แก้เองอยู่ที่ Child Theme ไม่ต้องไล่หาในไฟล์ Theme หลักหลายพันบรรทัด
ข้อควรรู้: แม้แต่ Theme ฟรียอดนิยมอย่าง Astra, GeneratePress หรือ Kadence ก็แนะนำให้สร้าง Child Theme ก่อนแก้ไฟล์ Template เสมอ ส่วนการปรับแต่งเล็กน้อย เช่น เปลี่ยนสีหรือเพิ่ม CSS สั้นๆ อาจใช้ Customizer หรือ Plugin ช่วยได้โดยไม่ต้องสร้าง Child Theme แต่ถ้าต้องแก้ PHP หรือ Template File เมื่อไหร่ Child Theme คือคำตอบเดียวที่ปลอดภัย
โครงสร้างไฟล์ Child Theme
Child Theme ต้องการไฟล์ขั้นต่ำเพียง 2 ไฟล์ใน Folder ใหม่ภายใต้ /wp-content/themes/:
/wp-content/themes/
my-parent-theme/ ← Parent Theme (อย่าแก้)
my-parent-theme-child/ ← Child Theme ของเรา
style.css ← ต้องมี (Header + Custom CSS)
functions.php ← แนะนำให้มี (Enqueue Parent CSS)
สร้าง Child Theme ด้วยตัวเอง (Manual)
ขั้นที่ 1: สร้าง Folder ใหม่
ผ่าน DirectAdmin File Manager หรือ FTP สร้าง Folder ใหม่ใน wp-content/themes/ ตั้งชื่อเช่น twentytwentyfive-child (ถ้า Parent Theme คือ Twenty Twenty-Five)
ขั้นที่ 2: สร้างไฟล์ style.css
สร้างไฟล์ style.css ใน Folder ที่สร้างใหม่ มีเนื้อหาดังนี้:
/*
Theme Name: Twenty Twenty-Five Child
Template: twentytwentyfive
Description: Child Theme ของ Twenty Twenty-Five
Author: Your Name
Version: 1.0
*/
/* เพิ่ม Custom CSS ที่นี่ */
ส่วนที่สำคัญที่สุดคือ Template: ต้องตรงกับชื่อ Folder ของ Parent Theme แบบตัวต่อตัว (รวม Uppercase/Lowercase)
ขั้นที่ 3: สร้างไฟล์ functions.php
สร้างไฟล์ functions.php ใน Child Theme Folder เพื่อ Enqueue Style ของ Parent Theme ก่อน Child:
<?php
add_action( 'wp_enqueue_scripts', 'my_child_theme_enqueue_styles' );
function my_child_theme_enqueue_styles() {
// โหลด Parent Theme Style
wp_enqueue_style(
'parent-style',
get_template_directory_uri() . '/style.css'
);
// โหลด Child Theme Style (ทับ Parent)
wp_enqueue_style(
'child-style',
get_stylesheet_directory_uri() . '/style.css',
array( 'parent-style' )
);
}
หมายเหตุ: Theme สมัยใหม่หลายตัว (เช่น Block Themes หรือ Theme ที่ใช้ theme.json) อาจโหลด CSS ผ่าน Asset ที่ต่างออกไป ไม่ต้องใช้ wp_enqueue_style สำหรับ Parent บางกรณี อ่าน Documentation ของ Theme นั้นก่อน
สร้าง Child Theme ทีละขั้น — เจาะลึก style.css และ functions.php Enqueue
หลายคนสร้างไฟล์ครบแล้วแต่เว็บกลับเพี้ยน Style หาย หรือ Child Theme ไม่ขึ้นในหน้า Themes ปัญหาเกือบทั้งหมดมาจากการเขียน Header ใน style.css ผิด หรือ Enqueue Style ใน functions.php ไม่ถูกลำดับ มาดูแต่ละจุดให้ละเอียดว่าทำไมต้องเขียนแบบนี้
เข้าใจ Header ใน style.css ทีละบรรทัด
Comment Header ด้านบนสุดของ style.css ไม่ใช่แค่ Comment ธรรมดา แต่เป็นข้อมูลที่ WordPress อ่านเพื่อรู้จัก Theme ของคุณ บรรทัดที่ขาดไม่ได้คือ Theme Name และ Template:
/*
Theme Name: Twenty Twenty-Five Child ← ชื่อที่โชว์ในหน้า Themes
Template: twentytwentyfive ← ⚠️ ต้องตรงกับชื่อโฟลเดอร์ Parent เป๊ะ
Theme URI: https://example.com/ ← (ไม่บังคับ)
Description: Child Theme ของ Twenty Twenty-Five
Author: Your Name ← (ไม่บังคับ)
Version: 1.0.0 ← (ไม่บังคับ แต่ควรมี)
Text Domain: twentytwentyfive-child ← (ไม่บังคับ แต่ช่วยเรื่องแปลภาษา)
*/
จุดที่พลาดบ่อยที่สุดคือ Template: ค่านี้ต้องเป็น "ชื่อโฟลเดอร์" ของ Parent Theme ไม่ใช่ "ชื่อที่แสดง" ของ Parent ตัวอย่างเช่น ถ้าโฟลเดอร์ Parent ชื่อ twentytwentyfive ต้องใส่ Template: twentytwentyfive ห้ามใส่ Twenty Twenty-Five (มีเว้นวรรคและตัวพิมพ์ใหญ่) เพราะ WordPress แยกแยะตัวพิมพ์เล็ก-ใหญ่ ถ้าผิดแม้แต่ตัวเดียว Child Theme จะขึ้นข้อความ "The parent theme is missing" และ Activate ไม่ได้
ทำไมต้อง Enqueue Parent Style ก่อน Child
ในอดีต Child Theme ใช้คำสั่ง @import ใน style.css เพื่อดึง Style ของ Parent มา แต่วิธีนี้ เลิกใช้แล้ว เพราะทำให้เว็บโหลดช้า (Browser ต้องโหลด CSS ทีละไฟล์ตามลำดับ ไม่ขนานกัน) วิธีที่ถูกต้องในปัจจุบันคือใช้ wp_enqueue_style ใน functions.php ซึ่งจะโหลด CSS แบบขนานและจัดลำดับ Dependency ได้ถูกต้อง
ลำดับการโหลดมีความสำคัญมาก เพราะ CSS ตัวที่โหลด "ทีหลัง" จะ Override ตัวที่โหลด "ก่อนหน้า" ดังนั้นเราต้องให้ Parent Style โหลดก่อน แล้วค่อยให้ Child Style โหลดตามมาทับ โดยใช้พารามิเตอร์ตัวที่ 3 (Dependencies array) บอก WordPress ว่า Child ต้องรอ Parent ก่อน:
<?php
add_action( 'wp_enqueue_scripts', 'asiagb_child_enqueue_styles' );
function asiagb_child_enqueue_styles() {
// 1) โหลด Parent Style ก่อน — ตั้ง handle ว่า 'parent-style'
wp_enqueue_style(
'parent-style',
get_template_directory_uri() . '/style.css'
);
// 2) โหลด Child Style ตามมา — ประกาศว่า depend บน 'parent-style'
wp_enqueue_style(
'child-style',
get_stylesheet_directory_uri() . '/style.css',
array( 'parent-style' ), // ← บังคับให้ Child โหลด "หลัง" Parent
wp_get_theme()->get( 'Version' ) // ← ผูก version เพื่อ cache-busting
);
}
ข้อแตกต่างสำคัญที่หลายคนสับสนคือ 2 ฟังก์ชันนี้:
get_template_directory_uri()→ ชี้ไปที่โฟลเดอร์ Parent Theme เสมอ ใช้ดึงไฟล์ของ Parentget_stylesheet_directory_uri()→ ชี้ไปที่โฟลเดอร์ Child Theme (Theme ที่กำลัง Active อยู่) ใช้ดึงไฟล์ของ Child
การผูก wp_get_theme()->get('Version') เป็นพารามิเตอร์ตัวที่ 4 ช่วยเรื่อง Cache-Busting คือเมื่อคุณเปลี่ยนเลข Version ใน Header ของ style.css เบราว์เซอร์ของผู้เข้าชมจะรู้ว่า CSS เปลี่ยนแล้วและโหลดใหม่ ไม่ติด Cache เก่า
ระวัง: Block Theme รุ่นใหม่ (เช่น Twenty Twenty-Four/Five) ที่ใช้ Full Site Editing และ theme.json จัดการ Style ผ่านระบบของตัวเอง บางตัว ไม่จำเป็นต้อง Enqueue Parent Style ด้วยมือ และถ้า Enqueue ซ้ำอาจทำให้ Style โหลดซ้อน ให้อ่านเอกสารของ Theme นั้นก่อนเสมอว่ารองรับ Child Theme แบบใด
Activate Child Theme
หลังสร้างไฟล์ทั้งสองแล้ว:
- ไปที่ WordPress Admin → Appearance → Themes
- จะเห็น Child Theme ใหม่ปรากฏขึ้นมา (อาจต้องรอสักครู่หรือ Refresh)
- คลิก Activate บน Child Theme
- เว็บจะยังเหมือนเดิม เพราะ Child Theme สืบทอดทุกอย่างจาก Parent
สร้าง Child Theme ด้วย Plugin (Child Theme Configurator)
ถ้าไม่ต้องการสร้างไฟล์เอง สามารถใช้ Plugin ช่วยได้
วิธีใช้ Child Theme Configurator
- ติดตั้ง Plugin Child Theme Configurator (ฟรี, 400,000+ installs)
- ไปที่ Tools → Child Theme Configurator
- เลือก Parent Theme ที่ต้องการ
- ตั้งชื่อ Child Theme และเลือก Options ต่างๆ
- คลิก Create Child Theme
- Plugin จะสร้าง Folder, style.css, functions.php ให้อัตโนมัติ และ Activate ทันที
เพิ่ม Custom CSS ใน Child Theme
มี 2 วิธีในการเพิ่ม Custom CSS:
วิธีที่ 1: เพิ่มใน style.css โดยตรง
เปิดไฟล์ style.css ใน Child Theme แล้วเพิ่ม CSS ต่อจาก Comment Header:
/* Custom CSS */
.site-header {
background-color: #059669;
}
.entry-title {
font-size: 2rem;
font-weight: 700;
}
วิธีที่ 2: ผ่าน WordPress Customizer
ไปที่ Appearance → Customize → Additional CSS เพิ่ม CSS ได้เลย วิธีนี้สะดวกกว่าแต่เก็บ CSS ใน Database แทน ไฟล์ Child Theme
Override Template Files ใน Child Theme
ถ้าต้องการแก้ Layout ของ Page เช่น เปลี่ยน Template ของ Single Post ให้คัดลอกไฟล์ Template จาก Parent Theme มาไว้ใน Child Theme แล้วแก้ไขได้เลย
# ตัวอย่าง: Override Single Post Template
# Copy จาก Parent:
/wp-content/themes/twentytwentyfive/single.php
# วางใน Child Theme:
/wp-content/themes/twentytwentyfive-child/single.php
# แก้ไข single.php ใน Child Theme ได้ตามต้องการ
# WordPress จะใช้ Version จาก Child Theme แทน
กฎสำคัญ: Override เฉพาะไฟล์ที่ต้องการแก้จริงๆ ไม่ใช่ Copy ทั้ง Theme มา เพราะถ้า Copy มาทั้งหมด ก็จะไม่ได้ประโยชน์จาก Parent Theme Updates อีกต่อไป
Override ไฟล์ที่ใช้บ่อย — header.php, footer.php และ Page Template
หลักการ "Template Hierarchy" ของ WordPress คือ เมื่อ WordPress ต้องการแสดงหน้าใดหน้าหนึ่ง มันจะมองหาไฟล์ Template ใน Child Theme ก่อนเสมอ ถ้าไม่เจอจึงค่อยไปดึงจาก Parent ดังนั้นเราจึง Override ได้ตั้งแต่ไฟล์โครงสร้างหลักอย่าง header.php ไปจนถึง Template เฉพาะหน้า
ตัวอย่างไฟล์ที่นิยม Override ใน Child Theme พร้อมหน้าที่ของแต่ละไฟล์:
| ไฟล์ที่ Override | ควบคุมส่วนไหนของเว็บ | มักแก้เพื่อ |
|---|---|---|
header.php | ส่วนหัวเว็บ (Logo, เมนู, Meta tag) | เพิ่ม Script, แก้เมนู, ใส่ Banner |
footer.php | ส่วนท้ายเว็บ (Copyright, Widget) | เปลี่ยนข้อความ Copyright, ใส่ Tracking |
single.php | หน้าบทความเดี่ยว | ปรับ Layout, เพิ่ม Related Post |
page.php | หน้า Page ทั่วไป | ซ่อน Title, ปรับความกว้าง |
archive.php | หน้ารวมบทความ / Category | เปลี่ยนจำนวนคอลัมน์ |
functions.php | โค้ด PHP ทั้งเว็บ | เพิ่ม Hook / Filter (ทำงานคู่ Parent) |
มีข้อยกเว้นสำคัญที่ต้องจำไว้: ไฟล์ functions.php ทำงานต่างจากไฟล์อื่นทั้งหมด ไฟล์ Template (header.php, single.php ฯลฯ) จะ "ถูกแทนที่" เมื่อ Child Theme มีไฟล์ชื่อเดียวกัน แต่ functions.php ของ Child จะ "ถูกโหลดเพิ่ม" ควบคู่กับ Parent ไม่ใช่แทนที่ ดังนั้นไม่ต้อง Copy เนื้อหา functions.php ของ Parent มาทั้งหมด ให้ใส่เฉพาะโค้ดใหม่ที่ต้องการเพิ่มเท่านั้น
นอกจากนี้ยังสร้าง Custom Page Template ของตัวเองได้ โดยสร้างไฟล์ใหม่ใน Child Theme เช่น template-fullwidth.php แล้วใส่ Header พิเศษด้านบนสุด:
<?php
/*
Template Name: หน้ากว้างเต็มจอ (Full Width)
*/
get_header(); ?>
<main class="full-width-content">
<?php while ( have_posts() ) : the_post(); ?>
<?php the_content(); ?>
<?php endwhile; ?>
</main>
<?php get_footer(); ?>
หลังบันทึกไฟล์ Template Name นี้จะปรากฏให้เลือกในช่อง "Template" ทางขวาของหน้าแก้ไข Page ใน WordPress Admin ทันที ใช้สำหรับหน้า Landing Page หรือหน้าที่ต้องการ Layout ต่างจากปกติ
เพิ่มฟังก์ชันใน functions.php ของ Child Theme
ไฟล์ functions.php ของ Child Theme ทำงานควบคู่กับ Parent ไม่ใช่ Override ดังนั้นสามารถเพิ่ม Hook, Filter, Custom Function ได้เลย:
<?php
// เพิ่ม Custom Functionality
add_action( 'wp_head', 'my_custom_analytics' );
function my_custom_analytics() {
// ใส่ Script Analytics หรืออะไรก็ได้
}
// ลบ Sidebar จาก Single Post
add_filter( 'theme_mod_single_sidebar', '__return_false' );
// เพิ่ม Custom Post Type
add_action( 'init', 'register_my_custom_post_type' );
function register_my_custom_post_type() {
// ...
}
การใช้งาน theme.json ใน Child Theme (Block Theme)
WordPress รุ่นใหม่ตั้งแต่เวอร์ชัน 5.8 เป็นต้นมาเปิดตัว Full Site Editing (FSE) ซึ่งเปลี่ยนวิธีจัดการ Style และ Layout ของ Theme อย่างสิ้นเชิง Block Theme เช่น Twenty Twenty-Three, Twenty Twenty-Four และ Twenty Twenty-Five ใช้ไฟล์ theme.json แทนการกำหนดค่าผ่าน CSS ตรงๆ ทำให้การสร้าง Child Theme สำหรับ Block Theme มีความแตกต่างจากวิธีดั้งเดิมพอสมควร
ใน Block Theme Child Theme สามารถสร้างไฟล์ theme.json ของตัวเองเพื่อ Override ค่าที่กำหนดใน Parent ได้ โดย WordPress จะ Merge ค่าทั้งสองอัตโนมัติ ค่าใน Child Theme จะชนะเสมอ ตัวอย่างที่พบบ่อยคือการเปลี่ยนสีหลักของเว็บและขนาดตัวอักษร:
{
"$schema": "https://schemas.wp.org/trunk/theme.json",
"version": 2,
"settings": {
"color": {
"palette": [
{
"name": "Primary",
"slug": "primary",
"color": "#059669"
},
{
"name": "Background",
"slug": "background",
"color": "#f0fdf4"
}
]
},
"typography": {
"fontSizes": [
{ "name": "Small", "slug": "small", "size": "14px" },
{ "name": "Normal", "slug": "normal", "size": "16px" },
{ "name": "Large", "slug": "large", "size": "20px" }
]
}
}
}
ข้อดีของการใช้ theme.json ใน Child Theme คือ WordPress ทำ Global Style Merge ให้อัตโนมัติ ไม่ต้องเขียน CSS แบบ Selector Override ยาวๆ และ Gutenberg Block Editor จะรับรู้สีและฟอนต์ที่กำหนดใหม่ทันที ทำให้ Editor กับหน้าเว็บจริงแสดงผลตรงกันมากขึ้น
สำคัญ: ถ้า Parent Theme เป็น Block Theme และใช้ theme.json การ Enqueue Parent Style ด้วยมือใน functions.php อาจไม่จำเป็น เพราะระบบ FSE จัดการ CSS โดยอัตโนมัติ ให้ตรวจสอบเอกสารของ Parent Theme ก่อนเสมอ เพื่อหลีกเลี่ยงการโหลด Style ซ้ำซ้อน
เปรียบเทียบวิธีสร้าง Child Theme: Manual, Plugin และ WP-CLI
มีสามวิธีหลักในการสร้าง Child Theme แต่ละวิธีเหมาะกับสถานการณ์ต่างกัน ตารางด้านล่างสรุปข้อดีข้อเสียของแต่ละวิธีเพื่อช่วยให้เลือกได้ถูก:
| วิธีสร้าง | เหมาะกับ | ข้อดี | ข้อควรระวัง |
|---|---|---|---|
| Manual (style.css + functions.php) | Developer หรือผู้ต้องการควบคุมเต็มที่ | ไม่ต้องติดตั้ง Plugin เพิ่ม, รู้โครงสร้างจริง | ต้องระวัง Template ผิด, Enqueue ผิดลำดับ |
| Plugin (Child Theme Configurator) | ผู้ใช้ทั่วไปที่ไม่คุ้นชิน Code | คลิกเดียวเสร็จ ไม่มีพิมพ์ผิด, มี GUI ตั้งค่า | ต้องติดตั้ง Plugin, บาง Block Theme อาจพลาด |
| WP-CLI | Dev/SysAdmin ที่มี SSH Access | เร็วที่สุด Scriptable ทำซ้ำในหลาย Site ได้ | ต้องมี WP-CLI และ SSH บน Hosting |
สำหรับผู้ใช้ Hosting ทั่วไปที่ไม่มี SSH วิธี Manual ผ่าน DirectAdmin File Manager หรือ FTP เป็นทางเลือกที่ดีที่สุด สร้างไฟล์เพียง 2 ไฟล์คือ style.css และ functions.php ก็เริ่มใช้งานได้ทันที ส่วน WP-CLI ใช้คำสั่งเดียว:
wp scaffold child-theme twentytwentyfive-child --parent_theme=twentytwentyfive --activate
ข้อผิดพลาดที่พบบ่อยและวิธีแก้ไข
แม้ Child Theme จะสร้างไม่ยาก แต่มีจุดสะดุดที่นักพัฒนาหน้าใหม่พลาดซ้ำๆ กัน ทราบจุดเหล่านี้ไว้ก่อนจะช่วยประหยัดเวลาได้มาก:
- "The parent theme is missing" error — เกิดจาก
Template:ในstyle.cssผิด ให้เช็คชื่อโฟลเดอร์ Parent Theme ในwp-content/themes/อีกครั้ง (รวม Uppercase/Lowercase) - Style ของ Parent หายหมดหลัง Activate Child Theme — เกิดจากลืม Enqueue Parent Style ใน
functions.phpหรือใช้@importแบบเก่า ให้เพิ่มwp_enqueue_styleที่ถูกต้อง - Child Theme ขึ้นแต่ไม่ทำงาน — ตรวจสอบว่า Activate Child Theme แล้วจริงๆ ที่ Appearance → Themes และตรวจ PHP Error Log ถ้ามี Syntax Error ใน
functions.php - Custom CSS ไม่มีผล — CSS ใน
style.cssอาจถูก Parent Theme ทับด้วย Specificity ที่สูงกว่า ให้เพิ่ม Selector ให้ Specific ขึ้น หรือเพิ่มบน WordPress Customizer แทน - Override Template แล้ว Layout พัง — ตรวจว่าไฟล์ Template ที่คัดลอกมาตรงกับเวอร์ชัน Parent ปัจจุบัน เพราะ Parent อาจอัพเดต Template แต่ไม่ได้อัพ Child ตาม
เคล็ดลับ Debug: เมื่อเว็บพังหลัง Activate Child Theme ให้เข้า WordPress Admin แบบ Incognito แล้วไปที่ Appearance → Themes เพื่อ Deactivate Child Theme ชั่วคราว ถ้าเว็บกลับมาปกติแปลว่าปัญหาอยู่ใน Child Theme ของคุณ ไม่ใช่ Server
แนวทาง Backup และการดูแล Child Theme ระยะยาว
Child Theme เป็นทรัพย์สินที่สำคัญมากของเว็บไซต์ เพราะเก็บการปรับแต่งทั้งหมดเอาไว้ ถ้าโฟลเดอร์ Child Theme หายจากเซิร์ฟเวอร์ (เช่น Hosting ล่ม ย้ายเซิร์ฟเวอร์ผิดพลาด หรือเผลอลบ) คุณจะเสียการปรับแต่งทั้งหมดที่สะสมมา แนวทางที่ควรทำมีดังนี้:
- Backup โฟลเดอร์ Child Theme แยกต่างหาก — ไม่ใช่แค่ Backup ทั้งเว็บ ให้ Zip เฉพาะโฟลเดอร์ Child Theme เก็บไว้ในเครื่องด้วยทุกครั้งที่มีการแก้ไขสำคัญ
- ใช้ Version Control (Git) — สำหรับ Developer ควรใส่โฟลเดอร์ Child Theme เข้า Git Repository เพื่อ Track ประวัติการเปลี่ยนแปลงและ Roll Back ได้ทุกเมื่อ
- อัปเดต Parent Theme สม่ำเสมอ — ไม่ต้องกลัวอีกต่อไปเพราะ Child Theme ดูแลให้แล้ว ควรอัปเดต Parent ทุกครั้งที่มี Security Patch เพื่อความปลอดภัยของเว็บ
- ตรวจ Child Theme หลัง Parent อัปเดต — บางครั้ง Parent Theme เพิ่ม Feature ใหม่หรือเปลี่ยน Template ที่คุณ Override ไว้ ให้ตรวจสอบหน้าเว็บหลักทุกครั้งหลัง Parent อัปเดต
- บันทึก Child Theme Version — เปลี่ยนเลข
Version:ในstyle.cssทุกครั้งที่แก้ไขสำคัญ เพื่อ Cache-Busting และให้รู้ว่ากำลังใช้เวอร์ชันไหน
สรุป: Child Theme ไม่ได้ซับซ้อนอย่างที่คิด ใช้ไฟล์แค่ 2 ไฟล์ก็เริ่มได้แล้ว แต่ให้ความปลอดภัยในระยะยาวที่คุ้มค่ามาก ถ้าเว็บของคุณใช้ WordPress และยังไม่มี Child Theme ให้สร้างทันทีก่อนที่การ Update ครั้งถัดไปจะลบงานของคุณทิ้ง
Hosting WordPress ที่รองรับ Child Theme เต็มรูปแบบ
AsiaGB Hosting รองรับ WordPress ครบครัน ใช้ DirectAdmin, SSD Storage, SSL ฟรี เริ่มต้น 500 บาท/ปี เข้าถึงไฟล์ผ่าน File Manager และ FTP ได้เต็มที่
ดูแพ็กเกจ Hosting →