คู่มือขั้นสูงสุดในการพัฒนา WordPress Theme: สร้างเทมเพลตแบบกำหนดเองตั้งแต่เริ่มต้นจนสำเร็จ

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

สภาพแวดล้อมการพัฒนาและโครงสร้างไฟล์พื้นฐาน

ก่อนเริ่มสร้างธีม WordPress การสร้างสภาพแวดล้อมการพัฒนาที่มีประสิทธิภาพและโครงสร้างที่ชัดเจนเป็นสิ่งสำคัญมาก สิ่งนี้ไม่เพียงช่วยในการจัดระเบียบโค้ด แต่ยังเป็นรากฐานสำหรับการบำรุงรักษาและการขยายในอนาคตอีกด้วย ธีม WordPress มาตรฐานคือโฟลเดอร์ที่อยู่ใน/wp-content/themes/ไดเรกทอรี โดยไฟล์ภายในจะปฏิบัติตามข้อกำหนดการตั้งชื่อและโครงสร้างเฉพาะ

ไฟล์และไดเรกทอรีหลัก

ทุกธีม WordPress ต้องมีไฟล์อย่างน้อยสองไฟล์:index.phpstyle.cssโดยที่style.cssไม่ใช่แค่สไตล์ชีต แต่เป็น “บัตรประจำตัว” ของธีม โดยบล็อกความคิดเห็นในส่วนหัวของไฟล์ใช้เพื่อประกาศข้อมูลธีมไปยังระบบ WordPressstyle.cssส่วนหัวของไฟล์ทั่วไปมีลักษณะดังนี้:

/*
Theme Name: My Custom Theme
Theme URI: https://example.com/my-theme
Author: Your Name
Author URI: https://example.com
Description: 这是一个从头开始构建的自定义WordPress主题。
Version: 1.0.0
License: GPL v2 or later
Text Domain: my-custom-theme
*/

นอกเหนือจากไฟล์ที่จำเป็นทั้งสองนี้แล้ว ธีมที่สมบูรณ์และมีโครงสร้างดีมักจะมีไดเรกทอรีและไฟล์ต่อไปนี้:
* functions.php: ไฟล์ฟังก์ชันของธีม ใช้สำหรับเพิ่มฟังก์ชัน การลงทะเบียนเมนู แถบด้านข้าง เป็นต้น
* header.php: เทมเพลตส่วนหัวของเว็บไซต์
* footer.php: เทมเพลตส่วนท้ายของเว็บไซต์
* sidebar.php: เทมเพลตแถบด้านข้าง
* page.php: เทมเพลตหน้าเว็บ
* single.php: เทมเพลตรายละเอียดบทความ
* archive.php: เทมเพลตหน้าจัดเก็บบทความ
* 404.php: เทมเพลตหน้าข้อผิดพลาด 404
* search.php: เทมเพลตหน้าผลลัพธ์การค้นหา
* assets/: ไดเรกทอรี: ใช้สำหรับจัดเก็บทรัพยากรคงที่ โดยทั่วไปประกอบด้วยcss/js/images/ในโฟลเดอร์ย่อย

แนะนำให้อ่าน เริ่มต้นจากศูนย์: สอนคุณสร้าง WordPress Theme แบบกำหนดเองทีละขั้นตอน

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

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

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

สร้างเทมเพลตหลักของธีม

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

เทมเพลตส่วนหัวและส่วนท้าย

เทมเพลตส่วนหัวheader.phpรับผิดชอบในการแสดงผลส่วนเริ่มต้นของแต่ละหน้า โดยทั่วไปรวมถึงการประกาศเอกสาร HTML,<head>พื้นที่ (ซึ่งประกอบด้วยหัวเรื่อง, ชุดตัวอักษร, การตั้งค่ามุมมอง, สไตล์และสคริปต์ที่นำเข้า) รวมถึงโลโก้ของเว็บไซต์และเมนูนำหลัก ในheader.phpที่ส่วนท้าย มักจะเรียก<body>ส่วนเริ่มต้นของแท็กและwp_body_openฮุก

เทมเพลตด้านล่างfooter.phpรับผิดชอบในการแสดงผลส่วนท้ายของแต่ละหน้า โดยทั่วไปรวมถึงพื้นที่วิดเจ็ตส่วนท้าย ข้อมูลลิขสิทธิ์ ไฟล์ JavaScript ที่นำเข้า และการปิด<body><html>แท็ก

ในไฟล์เทมเพลตอื่น ๆ ให้ใช้get_header()get_footer()ฟังก์ชันเพื่อนำเข้า เพื่อให้แน่ใจว่ามีความสอดคล้องกันของโครงสร้างเว็บไซต์

แนะนำให้อ่าน WordPress Theme Development Guide: ขั้นตอนและแนวทางปฏิบัติที่ดีที่สุดในการสร้างธีมที่กำหนดเองตั้งแต่เริ่มต้น

ลูปหลักและการแสดงเนื้อหา

ลูปหลักของ WordPress เป็นเครื่องยนต์ของธีม ใช้สำหรับดึงและแสดงโพสต์จากฐานข้อมูล โดยทั่วไปลูปจะใช้โครงสร้างif ( have_posts() ) : while ( have_posts() ) : the_post();ภายในลูป คุณสามารถใช้ชุดแท็กเทมเพลตเพื่อแสดงเนื้อหาของโพสต์ เช่นthe_title()the_content()the_excerpt()the_permalink()the_post_thumbnail()เป็นต้น

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

// 在 single.php 中一个典型的主循环示例
if ( have_posts() ) :
    while ( have_posts() ) : the_post();
        ?&gt;
        <article id="post-<?php the_ID(); ?>" no numeric noise key 1004>
            <header class="entry-header">
                <h1 class="entry-title"><?php the_title(); ?></h1>
                <div class="entry-meta">
                    | 作者:
                </div>
            </header>
            <div class="entry-content">
                <?php the_content(); ?>
            </div>
        </article>
        &lt;?php
        // 显示评论区
        if ( comments_open() || get_comments_number() ) :
            comments_template();
        endif;
    endwhile;
endif;

ใช้ functions.php เพื่อเพิ่มประสิทธิภาพฟังก์ชันของธีม

functions.phpไฟล์คือ “ศูนย์ควบคุม” ของธีมของคุณ รหัสฟังก์ชันทั้งหมดที่ไม่ใช่การแสดงผลโดยตรงควรเพิ่มที่นี่ มันทำหน้าที่เหมือนปลั๊กอินที่เปิดใช้งานอยู่เสมอ

hosting.com 共享主机
高性能,配备 AMD EPYC CPU、NVMe SSD 存储和 LiteSpeed,全天候24小时、全天候的专家内部支持,高级安全措施,包括 SSL、暴力破解、恶意软件和 DDoS 防护,节省高达 73%

การลงทะเบียนการสนับสนุนธีมและเมนู

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

function my_theme_setup() {
    // 添加文章特色图像支持
    add_theme_support( 'post-thumbnails' );
    // 添加自定义徽标支持
    add_theme_support( 'custom-logo' );
    // 添加标题标签支持(由WordPress自动管理)
    add_theme_support( 'title-tag' );
    // 添加HTML5标记支持
    add_theme_support( 'html5', array( 'comment-list', 'comment-form', 'search-form', 'gallery', 'caption', 'style', 'script' ) );
}
add_action( 'after_setup_theme', 'my_theme_setup' );

การลงทะเบียนตำแหน่งเมนูนำทางก็ทำที่นี่เช่นกัน ใช้register_nav_menus()ฟังก์ชันกำหนดตำแหน่งเมนู จากนั้นคุณสามารถheader.phpใช้ฟังก์ชันwp_nav_menu()เรียกใช้มัน

เพิ่มสไตล์ชีตและสคริปต์

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

แนะนำให้อ่าน เริ่มต้นจากศูนย์: คู่มือฉบับสมบูรณ์ในการสร้างธีม WordPress ที่มีประสิทธิภาพสูงและปรับแต่งได้

function my_theme_scripts() {
    // 引入主题的主样式表
    wp_enqueue_style( 'my-theme-style', get_stylesheet_uri(), array(), '1.0.0' );
    // 引入自定义CSS文件
    wp_enqueue_style( 'my-custom-css', get_template_directory_uri() . '/assets/css/custom.css', array(), '1.0.0' );
    // 引入jQuery(WordPress已内置)和自定义JS
    wp_enqueue_script( 'my-custom-js', get_template_directory_uri() . '/assets/js/main.js', array( 'jquery' ), '1.0.0', true ); // true表示在底部加载
}
add_action( 'wp_enqueue_scripts', 'my_theme_scripts' );

สร้างเทมเพลตแบบกำหนดเองและเทมเพลตหน้า

WordPress อนุญาตให้คุณสร้างเลย์เอาต์ที่ไม่ซ้ำใครสำหรับหน้าเว็บหรือบทความเฉพาะ ซึ่งทำได้โดยใช้เทมเพลตที่กำหนดเองและเทมเพลตหน้า

เทมเพลตสำหรับประเภทบทความที่กำหนดเองและหมวดหมู่

หากคุณลงทะเบียนประเภทบทความที่กำหนดเอง (เช่น “ผลิตภัณฑ์”) หรือหมวดหมู่ที่กำหนดเอง (เช่น “หมวดหมู่ผลิตภัณฑ์”) ผ่านโค้ดหรือปลั๊กอิน ลำดับชั้นเทมเพลตของ WordPress ก็จะใช้ได้เช่นกัน ตัวอย่างเช่น คุณสามารถสร้างsingle-product.phpเพื่อควบคุมการแสดงผลหน้าเดียวของประเภท “ผลิตภัณฑ์” แยกกัน สร้างarchive-product.phpเพื่อควบคุมหน้าผลิตภัณฑ์รายการ, สร้างtaxonomy-product-category.phpเพื่อควบคุมหน้าหนังสือเก่าของหมวดหมู่ผลิตภัณฑ์เฉพาะ ซึ่งให้ความยืดหยุ่นอย่างมากในการสร้างเว็บไซต์เนื้อหาที่ซับซ้อน (เช่น แฟ้มผลงาน, ร้านค้า)

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

ป้ายกำกับเงื่อนไขและเทมเพลตหน้าที่กำหนดเอง

ป้ายกำกับเงื่อนไข (เช่นis_front_page()is_page()is_single()) ช่วยให้คุณสามารถแสดงเนื้อหาต่างๆ ตามเงื่อนไขที่แตกต่างกันในไฟล์เทมเพลตเดียว แต่วิธีที่ทรงพลังยิ่งกว่าคือการสร้างเทมเพลตหน้าแบบกำหนดเอง

คุณสามารถสร้างไฟล์ PHP ในไดเรกทอรีธีมและเพิ่มบล็อกความคิดเห็นเฉพาะในส่วนหัวของไฟล์เพื่อประกาศให้เป็นเทมเพลตหน้า จากนั้นเลือกเทมเพลตนี้สำหรับหน้าหนึ่งๆ ในแอดมินของ WordPress

<?php
/**
 * Template Name: 全宽页面模板
 * Description: 一个没有侧边栏的全宽度页面模板
 */
get_header(); ?>
<div class="full-width-content">
    <?php
    while ( have_posts() ) : the_post();
        the_content();
    endwhile;
    ?>
</div>
<?php get_footer(); ?>

นอกจากนี้ ตั้งแต่ WordPress 5.0 เป็นต้นมา บล็อกกูเทนเบิร์กได้กลายเป็นตัวแก้ไขหลัก คุณสามารถสร้างเทมเพลตบล็อก (block-template-canvas.php) หรือใช้ประโยชน์จากtheme.jsonไฟล์นี้ใช้เพื่อกำหนดสไตล์ แพเลตต์สี และการสนับสนุนบล็อกของธีมในระดับโลก เพื่อให้ได้วิธีการสร้างธีมที่ทันสมัยและเป็นภาพมากขึ้น

สรุป

การพัฒนา WordPress Theme ตั้งแต่เริ่มต้นเป็นกระบวนการที่เป็นระบบ ซึ่งต้องการให้นักพัฒนาไม่เพียงแต่เชี่ยวชาญ PHP, HTML, CSS และ JavaScript เท่านั้น แต่ยังต้องเข้าใจแนวคิดหลักของ WordPress อย่างลึกซึ้ง เช่น Template Hierarchy, The Loop, Hooks and Actions, Template Tags เป็นต้น เริ่มจากโครงสร้างไดเรกทอรีที่เป็นมาตรฐาน สร้างไฟล์ส่วนหัว ส่วนท้าย และไฟล์เทมเพลตหลักทีละขั้นตอน ใช้functions.phpเพื่อเพิ่มประสิทธิภาพและโหลดทรัพยากรอย่างถูกต้อง และสุดท้ายใช้เทมเพลตที่กำหนดเองและตรรกะเงื่อนไขเพื่อสร้างเค้าโครงหน้าที่ซับซ้อน ด้วยการทำตามขั้นตอนนี้ คุณจะสามารถสร้างธีมที่กำหนดเองซึ่งตรงตามความต้องการการออกแบบอย่างสมบูรณ์ มีประสิทธิภาพสูง และบำรุงรักษาได้ง่าย เพื่อให้ได้อิสระและการควบคุมสูงสุดในโลกของ WordPress

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

การพัฒนา Theme จำเป็นต้องเริ่มจากศูนย์เสมอหรือไม่?

ไม่จำเป็นเสมอไป สำหรับผู้เริ่มต้นหรือนักพัฒนาที่ต้องการเริ่มต้นอย่างรวดเร็ว การเริ่มจากธีมพื้นฐานที่มีอยู่แล้ว (เช่น Underscores, _s) หรือธีมหลัก (เช่น Genesis, Astra) เป็นทางเลือกที่ดีเยี่ยม ธีมเหล่านี้มีโครงสร้างไฟล์มาตรฐานและโค้ดพื้นฐานที่เตรียมไว้แล้ว คุณสามารถทำการปรับเปลี่ยนและปรับแต่งบนพื้นฐานนั้นได้ ซึ่งมีประสิทธิภาพมากกว่าการเริ่มต้นจากศูนย์โดยสิ้นเชิง

ไฟล์ style.css สามารถเว้นว่างได้ทั้งหมดหรือไม่?

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

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

คุณต้องใช้ฟังก์ชันสากลของ WordPress (เช่น__()_e()) เพื่อห่อหุ้มข้อความสตริงทั้งหมดที่ต้องการแปล จากนั้นในstyle.cssfunctions.phpตั้งค่าอย่างถูกต้องในText Domainและใช้เครื่องมือเช่น Poedit เพื่อสร้าง.potไฟล์เทมเพลตและไฟล์ที่สอดคล้องกัน.po.moแปลไฟล์ นี่เป็นคุณสมบัติที่จำเป็นสำหรับหัวข้อมืออาชีพ

ทำไมเทมเพลตที่กำหนดเองของฉันไม่แสดงในคุณสมบัติหน้าของแอดมิน?

โปรดตรวจสอบก่อนว่าไฟล์เทมเพลตหน้าที่กำหนดเองของคุณอยู่ในโฟลเดอร์รากของธีมหรือไม่ และรูปแบบบล็อกความคิดเห็นที่ด้านบนของไฟล์ต้องถูกต้องทั้งหมด โดยเฉพาะบรรทัด “Template Name:” ชื่อไฟล์และเส้นทางที่ผิด หรือรูปแบบความคิดเห็นที่ไม่ถูกต้อง จะทำให้ WordPress ไม่สามารถจดจำเทมเพลตนั้นได้

ธีมที่พัฒนาสำเร็จแล้วจะเผยแพร่หรือแบ่งปันให้ผู้อื่นใช้ได้อย่างไร?

วิธีที่ถูกต้องที่สุดคือการบีบอัดโฟลเดอร์ธีมของคุณเป็นไฟล์ ZIP ผู้ใช้สามารถอัปโหลดและติดตั้งไฟล์ ZIP นี้ได้โดยตรงใน WordPress ผ่านทาง “รูปลักษณ์” -> “ธีม” -> “เพิ่มธีมใหม่” -> “อัปโหลดธีม” หากคุณต้องการเผยแพร่ธีมไปยังไดเรกทอรีธีมอย่างเป็นทางการของ WordPress คุณจะต้องปฏิบัติตามมาตรฐานโค้ดและกระบวนการตรวจสอบที่เข้มงวดมากขึ้น ซึ่งรวมถึงความปลอดภัย คุณภาพของโค้ด การสนับสนุนสากล เป็นต้น