WordPress Theme Development Complete Guide: สร้างธีมแบบกำหนดเองตั้งแต่เริ่มต้นจนเสร็จสมบูรณ์

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

พื้นฐานการพัฒนา WordPress Theme: สภาพแวดล้อมและแนวคิดหลัก

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

ธีม WordPress โดยพื้นฐานแล้วคือโฟลเดอร์ที่อยู่ใน/wp-content/themes/โฟลเดอร์ในไดเรกทอรี โฟลเดอร์นี้ต้องมีไฟล์หลักอย่างน้อยสองไฟล์:style.cssindex.phpโดยที่style.cssไม่ใช่เพียงไฟล์สไตล์ชีตเท่านั้น แต่ยังทำหน้าที่เป็น “บัตรประจำตัว” ของธีมด้วย โดยคอมเมนต์ส่วนหัวของไฟล์กำหนดข้อมูลเมตาของธีม เช่น ชื่อ ผู้เขียน คำอธิบาย เป็นต้น

การทำความเข้าใจลำดับชั้นของเทมเพลต WordPress เป็นกุญแจสำคัญในการพัฒนา WordPress จะเลือกไฟล์เทมเพลตที่สอดคล้องกันโดยอัตโนมัติเพื่อแสดงผลเนื้อหาตามประเภทของหน้าที่กำลังเข้าชม (เช่น หน้าแรก, หน้ารายการโพสต์, หน้า, หน้ารวบรวมหมวดหมู่ เป็นต้น) ตัวอย่างเช่น เมื่อผู้ใช้เข้าชมโพสต์เดี่ยว WordPress จะค้นหาไฟล์ตามลำดับsingle-post.phpsingle.phpและสุดท้ายคือindex.phpกลไกนี้ช่วยให้คุณสามารถออกแบบเลย์เอาต์ที่เป็นเอกลักษณ์สำหรับส่วนต่างๆ ของเว็บไซต์ได้

แนะนำให้อ่าน คู่มือขั้นสูงสุดสำหรับการพัฒนา WordPress Theme: จากพื้นฐานสู่การปฏิบัติจริง

ไฟล์พื้นฐานของธีม

functions.phpไฟล์เป็น “ศูนย์กลางควบคุม” ของธีมของคุณ มันไม่ใช่ไฟล์ที่ต้องมีอยู่ แต่แทบทุกธีมขาดมันไม่ได้ คุณสามารถเพิ่มฟังก์ชันที่กำหนดเอง, จดทะเบียนเมนู, ไซด์บาร์ (พื้นที่วิดเจ็ต), นำเข้าไฟล์สคริปต์และสไตล์ชีต, และเรียกใช้ฟังก์ชันต่างๆ ได้ในนั้นadd_actionadd_filterฮุคสำหรับขยายหรือปรับเปลี่ยนพฤติกรรมหลักของ WordPress ไฟล์นี้จะโหลดโดยอัตโนมัติเมื่อธีมถูกเปิดใช้งาน

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

ไฟล์ที่สำคัญอีกอย่างหนึ่งคือstyle.cssส่วนหัวของไฟล์นี้คือพื้นที่ประกาศของธีม รูปแบบมีดังนี้

/*
Theme Name: 我的自定义主题
Theme URI: https://example.com/my-theme
Author: 你的名字
Author URI: https://yourwebsite.com
Description: 一个用于学习的自定义WordPress主题。
Version: 1.0.0
License: GPL v2 or later
Text Domain: my-custom-theme
*/

ในนั้นText Domainใช้สำหรับการทำให้ธีมเป็นสากล เป็นตัวระบุที่ใช้ในการเรียกฟังก์ชันการแปลในภายหลัง__()_e()ตัวระบุที่ใช้

โครงสร้างพื้นฐานและเทมเพลตสำหรับการสร้างธีม

โครงสร้างไฟล์ธีมทั่วไปเริ่มต้นจากการสร้างเทมเพลตพื้นฐาน ก่อนอื่นคือheader.phpซึ่งประกอบด้วยส่วนหัวของเอกสาร HTML,พื้นที่สาธารณะด้านบนของพื้นที่และเว็บไซต์ เช่นโลโก้และเมนูนำหลัก การใช้wp_head()ฟังก์ชันนี้เป็นสิ่งสำคัญสำหรับการแสดงสคริปต์และสไตล์ที่จำเป็นสำหรับ WordPress Core และปลั๊กอิน

ที่สอดคล้องกันfooter.phpรวมถึงพื้นที่สาธารณะด้านล่างของเว็บไซต์ และเรียกใช้wp_footer()ฟังก์ชันที่ส่วนท้าย เนื้อหาหลักของเว็บไซต์จะถูกห่อหุ้มระหว่าง “ส่วนหัว” และ “ส่วนท้าย” นี้

แนะนำให้อ่าน การพัฒนา WordPress Theme: คู่มือฉบับสมบูรณ์ในการสร้างธีมแบบกำหนดเองตั้งแต่เริ่มต้น

เทมเพลตหลักสำหรับประกอบหน้าเว็บ

index.phpเป็นเทมเพลตพื้นฐานที่สุดของธีมของคุณ และเป็นตัวเลือกสุดท้ายเมื่อไม่มีเทมเพลตอื่นที่เจาะจงมากขึ้น มันมีหน้าที่หลักในการประกอบส่วนต่าง ๆ เข้าด้วยกันindex.phpโครงสร้างมีดังนี้

<?php get_header(); ?>

<main id="primary" class="site-main">
    <?php
    if ( have_posts() ) :
        while ( have_posts() ) :
            the_post();
            // 展示每篇文章的内容
            get_template_part( 'template-parts/content', get_post_type() );
        endwhile;
        the_posts_navigation();
    else :
        get_template_part( 'template-parts/content', 'none' );
    endif;
    ?>
</main>

<?php get_sidebar(); // 如果不需要侧边栏,可以删除此行 ?>
<?php get_footer(); ?>

เทมเพลตนี้ใช้ลูปหลักของ WordPress (The Loop) เพื่อวนซ้ำและแสดงรายการบทความ เพื่อให้โค้ดเป็นโมดูลาร์และบำรุงรักษาได้ง่าย เราใช้get_template_part()ฟังก์ชันเพื่อเรียกใช้ไฟล์เทมเพลตเนื้อหาแยกต่างหาก

สร้างเทมเพลตเนื้อหาที่นำกลับมาใช้ใหม่ได้

โดยทั่วไป เราจะสร้างโฟลเดอร์template-partsในไดเรกทอรีธีม และเก็บไฟล์เช่นcontent.phpไว้ในนั้น ไฟล์นี้มุ่งเน้นไปที่วิธีการแสดงบทสรุปหรือเนื้อหาทั้งหมดของบทความหรือหน้า:

hosting.com 共享主机
高性能,配备 AMD EPYC CPU、NVMe SSD 存储和 LiteSpeed,全天候24小时、全天候的专家内部支持,高级安全措施,包括 SSL、暴力破解、恶意软件和 DDoS 防护,节省高达 73%
<article id="post-<?php the_ID(); ?>" no numeric noise key 1003>
    <header class="entry-header">
        <h2 class="entry-title">
            <a href="/th/</?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a>
        </h2>
    </header>
    <div class="entry-content">
        <?php the_excerpt(); ?>
    </div>
</article>

ด้วยวิธีนี้ คุณสามารถสร้างเทมเพลตเนื้อหาที่แตกต่างกันสำหรับประเภทบทความต่างๆ (เช่นpostpage) อย่างง่ายดาย (เช่นcontent-post.phpcontent-page.php) ระบบจะจับคู่โดยอัตโนมัติ

เพิ่มฟังก์ชันหลักให้กับธีมของคุณ

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

เริ่มต้นการสนับสนุนหลักของธีม

ขั้นตอนแรกคือการใช้after_setup_themeฮุกสำหรับประกาศความสามารถของธีมที่รองรับ นี่บอก WordPress ว่าธีมของคุณสามารถใช้คุณสมบัติใดได้บ้าง:

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

add_action( 'after_setup_theme', 'my_theme_setup' );
function my_theme_setup() {
    // 让主题支持自动生成<title>标签
    add_theme_support( 'title-tag' );
    // 支持文章特色图像
    add_theme_support( 'post-thumbnails' );
    // 支持HTML5的语义化标记
    add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption' ) );
    // 支持自定义Logo
    add_theme_support( 'custom-logo', array(
        'height'      => 100,
        'width'       => 400,
        'flex-height' => true,
        'flex-width'  => true,
    ) );
    // 注册一个导航菜单位置
    register_nav_menus( array(
        'menu-1' => esc_html__( '主导航', 'my-custom-theme' ),
    ) );
}

จัดการสคริปต์และสไตล์ชีต

การเพิ่มไฟล์ CSS และ JavaScript เข้าสู่คิวอย่างถูกต้องเป็นข้อกำหนดสำหรับนักพัฒนามืออาชีพ คุณควรใช้wp_enqueue_scriptsฮุกเพื่อทำงานนี้ แทนที่จะเขียนในเทมเพลตโดยตรงป้ายกำกับ:

add_action( 'wp_enqueue_scripts', 'my_theme_scripts' );
function my_theme_scripts() {
    // 引入主题的主样式表
    wp_enqueue_style( 'my-theme-style', get_stylesheet_uri(), array(), wp_get_theme()->get('Version') );

// 引入自定义的JavaScript文件
    wp_enqueue_script( 'my-theme-navigation', get_template_directory_uri() . '/js/navigation.js', array(), wp_get_theme()->get('Version'), true );

// 如果需要使用jQuery(通常由WordPress核心提供),可以声明依赖
    wp_enqueue_script( 'my-theme-custom', get_template_directory_uri() . '/js/custom.js', array('jquery'), wp_get_theme()->get('Version'), true );
}

พื้นที่วิดเจ็ตการลงทะเบียน

พื้นที่วิดเจ็ตด้านข้างหรือส่วนท้ายก็จำเป็นต้องมีในfunctions.phpด้วย ใช้widgets_inithooks:

โฮสติ้งแบบแชร์ของ InterServer
共享主机每月 $2.50 USD , 首月 $0.1 USD 优惠码 tryinterserver, 461个云应用脚本,一键安装。
add_action( 'widgets_init', 'my_theme_widgets_init' );
function my_theme_widgets_init() {
    register_sidebar( array(
        'name'          =&gt; esc_html__( '侧边栏', 'my-custom-theme' ),
        'id'            =&gt; 'sidebar-1',
        'description'   =&gt; esc_html__( '在此添加小工具。', 'my-custom-theme' ),
        'before_widget' =&gt; '<section id="%1$s" class="widget %2$s">',
        'after_widget'  =&gt; '</section>',
        'before_title'  =&gt; '<h2 class="widget-title">',
        'after_title'   =&gt; '</h2>',
    ) );
}

หลังจากลงทะเบียนแล้ว คุณสามารถเรียกใช้ในเทมเพลตผ่านdynamic_sidebar( 'sidebar-1' )get_sidebar()ฟังก์ชันได้แล้ว

การพัฒนาแบบขั้นสูงและฟังก์ชันที่กำหนดเอง

หลังจากที่โครงสร้างธีมพื้นฐานเสร็จสิ้น คุณสามารถใช้เทคนิคขั้นสูงเพื่อเพิ่มความเชี่ยวชาญและความยืดหยุ่น

สร้างเทมเพลตหน้าคุณสมบัติพิเศษ

เทมเพลตหน้าเว็บช่วยให้คุณกำหนดเลย์เอาต์ที่ไม่เหมือนใครให้กับหน้าจำเพาะ สร้างไฟล์ เช่นpage-fullwidth.phpในส่วนหัวของไฟล์ เพิ่มความคิดเห็นชื่อเทมเพลตดังนี้:

<?php
/**
 * Template Name: 全宽页面
 * Description: 一个没有侧边栏的全宽页面模板。
 */
get_header(); ?>
<main class="full-width">
    <?php while ( have_posts() ) : the_post(); ?>
        <article id="post-<?php the_ID(); ?>" no numeric noise key 1004>
            <h1><?php the_title(); ?></h1>
            <div class="entry-content">
                <?php the_content(); ?>
            </div>
        </article>
    <?php endwhile; ?>
</main>
<?php get_footer(); ?>

เมื่อสร้างหรือแก้ไขหน้า คุณสามารถเลือกเทมเพลต “หน้ากว้างเต็ม” นี้ได้ใน “คุณสมบัติหน้า”

การรองรับตัวปรับแต่งธีม

WordPress Customizer มีอินเทอร์เฟซการกำหนดค่าที่แสดงตัวอย่างแบบเรียลไทม์ให้กับผู้ใช้ คุณสามารถเพิ่มตัวเลือกการตั้งค่าได้อย่างง่ายดายผ่านcustomize_registerฮุก เช่น ข้อความลิขสิทธิ์ส่วนท้ายหน้า:

add_action( 'customize_register', 'my_theme_customize_register' );
function my_theme_customize_register( $wp_customize ) {
    // 添加一个设置项
    $wp_customize->add_setting( 'footer_copyright_text', array(
        'default'           => '© 2026 我的网站. 保留所有权利。',
        'sanitize_callback' => 'sanitize_text_field',
        'transport'         => 'postMessage', // 支持实时预览
    ) );

// 为设置项添加一个控件(输入框)
    $wp_customize->add_control( 'footer_copyright_text', array(
        'label'    => __( '页脚版权文本', 'my-custom-theme' ),
        'section'  => 'title_tagline', // 放到“站点身份”区域
        'type'     => 'text',
    ) );
}

จากนั้นในfooter.phpใน, ใช้get_theme_mod( 'footer_copyright_text' )ให้แสดงค่านี้ออกมา

แนะนำเวิร์กโฟลว์ส่วนหน้าที่ทันสมัย

สำหรับหัวข้อที่ซับซ้อน การจัดการไฟล์ CSS และ JS ด้วยตนเองอาจไม่มีประสิทธิภาพ คุณอาจพิจารณาแนะนำ Node.js และเครื่องมือสร้าง (build tools) ในโปรเจกต์ เช่น ใช้ Webpack หรือ Vite เพื่อรวมทรัพยากร (bundle resources) คอมไพล์ Sass/Less เพิ่มคำนำหน้า CSS สำหรับเบราว์เซอร์โดยอัตโนมัติ บีบอัดโค้ด เป็นต้น โดยทั่วไปจะเกี่ยวข้องกับการสร้างไฟล์package.jsonและไฟล์กำหนดค่าการสร้าง (build configuration file) ในไดเรกทอรีรากของหัวข้อ และส่งออกไฟล์ที่สร้างเสร็จแล้วไปยังไดเรกทอรีเฉพาะของหัวข้อ (เช่น/assets/dist/) จากนั้นจึงนำเข้าไฟล์ที่สร้างแล้วเหล่านี้ในfunctions.phpนำไฟล์ที่ถูกสร้างแล้วเหล่านี้เข้าไปใน

สรุป

การพัฒนา WordPress Theme เป็นกระบวนการที่เริ่มจากการทำความเข้าใจลำดับชั้นของเทมเพลตหลักและโครงสร้างไฟล์ จากนั้นค่อยๆ สร้างไฟล์เทมเพลต บูรณาการฟังก์ชันการทำงาน และในที่สุดก็ทำให้เป็นมืออาชีพผ่านการปรับแต่งขั้นสูงและการปรับปรุงเครื่องมือที่ใช้ ประเด็นสำคัญคือการยึดตามมาตรฐานการเข้ารหัสและแนวทางปฏิบัติที่ดีที่สุดของ WordPress เช่น การใช้ฟังก์ชันฮุคอย่างถูกต้อง การเพิ่มสคริปต์และสไตล์ลงในคิว และการใช้ template part เพื่อให้โค้ดเป็นระเบียบเรียบร้อย เริ่มจากการสร้างindex.phpstyle.cssง่ายๆ ค่อยๆ เพิ่มheader.phpfooter.phpในfunctions.phpและไปจนถึงการสร้างเทมเพลตที่กำหนดเองและตัวเลือกในตัวปรับแต่ง ทุกขั้นตอนทำให้ธีมของคุณมีประสิทธิภาพและใช้งานง่ายมากขึ้น เมื่อเชี่ยวชาญทักษะเหล่านี้แล้ว คุณจะสามารถสร้าง WordPress Theme ที่มีคุณภาพสูงและตอบสนองความต้องการต่างๆ ได้

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

การพัฒนา WordPress Theme จำเป็นต้องเชี่ยวชาญ PHP หรือไม่?

ใช่แล้ว PHP เป็นภาษาพื้นฐานสำหรับการพัฒนา WordPress Theme คุณต้องเข้าใจไวยากรณ์พื้นฐานของ PHP, การทำงานร่วมกับฟังก์ชันหลักของ WordPress (เช่นthe_post()the_title()) และตัวแปรส่วนกลาง (เช่น$post) รวมถึงการใช้ Action Hooks และ Filter Hooks HTML และ CSS จำเป็นสำหรับการสร้างรูปลักษณ์ ส่วน JavaScript ใช้สำหรับฟังก์ชันการโต้ตอบ

ทำไมการเปลี่ยนแปลงธีมของฉันถึงไม่แสดงผลหลังรีเฟรช?

โดยปกติแล้วนี่เกิดจากแคชของเบราว์เซอร์หรือแคชอ็อบเจ็กต์ของ WordPress ก่อนอื่น ลองกด Ctrl+F5 (หรือ Cmd+Shift+R) ในเบราว์เซอร์เพื่อรีเฟรชแบบแข็งขัน ประการที่สอง หากคุณได้แนะนำการควบคุมเวอร์ชัน (เช่นfunctions.php) ในwp_get_theme()->get('Version')โปรดตรวจสอบให้แน่ใจว่าได้อัปเดตหมายเลขเวอร์ชันในส่วนหัวของไฟล์style.cssหลังจากทุกการแก้ไข นอกจากนี้ ตรวจสอบโค้ดของคุณว่ามีข้อผิดพลาดทางไวยากรณ์ที่ทำให้functions.phpการดำเนินการไฟล์ล้มเหลว

จะทำให้ธีมของฉันรองรับหลายภาษาได้อย่างไร?

คุณต้องทำสองสิ่ง: หนึ่งคือ “การทำให้เป็นสากล” และสองคือ “การปรับให้เข้ากับท้องถิ่น” ก่อนอื่น ในตำแหน่งของสตริงทั้งหมดที่ต้องแปลในธีม ให้ใช้ฟังก์ชันการแปลของ WordPress เช่นesc_html__(‘文本’, ‘my-text-domain’)_e(‘文本’, ‘my-text-domain’)และให้แน่ใจว่าstyle.cssที่กำหนดไว้ในText Domainให้สอดคล้องกับโดเมนข้อความที่นี่ จากนั้น ใช้เครื่องมือเช่น Poedit เพื่อสแกนธีมของคุณ สร้าง.potไฟล์เทมเพลตการแปล นักแปลสามารถใช้เป็นพื้นฐานในการสร้างภาษาที่สอดคล้องกันได้.poและไฟล์ที่คอมไพล์แล้ว.moไฟล์ วางไว้ในธีม/languages/ไดเรกทอรีจะมีผลทันที

ธีมและปลั๊กอินควรแบ่งหน้าที่กันอย่างไร?

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