รู้จักกับ Child Theme ใน WordPress

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

Child Theme ในเวิร์ดเพรส

ในเวิร์ดเพรส  เราสามารถสร้างธีมลูก (หรือ Child Theme) ให้กับธีมใดๆ ก็ได้  โดยธีมลูกนั้นจะคล้ายๆ กับการเขียนคลาสใหม่ที่ขยายคลาสเดิมใน PHP  คือเมื่อเราเปิดใช้ธีมลูกแล้ว  ในขั้นตอนการหาไฟล์ Template ตาม Hierarchy ของเวิร์ดเพรส  ตัวเวิร์ดเพรสจะมองหาไฟล์เท็มเพลตในธีมลูกก่อน  หากไม่เจอจึงจะไปหาเอาในธีมหลัก

ตัวอย่างเช่นเราต้องการแก้ไขหน้าตาของ single.php (หน้าแสดงโพสต์) เราก็จัดการสร้างธีมลูกขึ้นมา  และสร้างไฟล์ single.php ขึ้นมา  และปรับแต่งหน้าตาใดๆ ให้เรียบร้อยตามต้องการ  เมื่อเวิร์ดเพรสมองหาเท็มเพลท single.php มันจะไปมองหา single.php ในธีมลูก ก่อน  หากไม่เจอ  จึงจะไปหา single.php ในธีมหลัก

การสร้าง Child Theme

Child Theme นั้นสามารถสร้างได้ง่ายมากครับ  ต้องการเพียงไฟล์ style.css เพียงไฟล์เดียวเท่านั้น  โดยในส่วนคอนฟิก  เราก็แค่เพิ่มค่า Template ลงไป  โดยค่า Template จะเป็นชื่อไดเรคทอรี่ที่เก็บธีมหลักเอาไว้  และให้ทำการ @import ไฟล์ CSS ของธีมหลักเข้ามา เช่น

/*
Theme name: Midnize SPARK
Theme URI: http://jirayu.in.th
Template: sparkling
Author: Jirayu Yingthawornsuk
Author URI: http://jirayu.in.th
*/

@import url("../sparkling/style.css");

และหากต้องการแก้ไข CSS ใดๆ ก็สามารถใส่ลงไปต่อท้ายได้เลย

เมื่อเราไปดูใน Appearance > Themes ก็จะพบกับธีมลูกที่เราเพิ่งสร้างขึ้น เพิ่มเข้ามาครับ  สามารถ Activate ใช้งานได้ทันที

Child Theme ในเวิร์ดเพรส

ไฟล์ functions.php

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

Posted by jirayu

WordPress Developer ที่พอมีประสบการณ์อยู่บ้าง วันไหนไม่ทำงานอยู่บ้านว่างๆ ก็นั่งเลี้ยงแมว

Leave a Reply

Your email address will not be published. Required fields are marked *