การพัฒนา WordPress Theme: เรียนรู้แนวทางปฏิบัติหลักและวิธีที่ดีที่สุดสำหรับไฟล์ `functions.php`

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

`functions.php` นิยามและบทบาทหลักของไฟล์

ในธีม WordPressfunctions.phpเป็นไฟล์พิเศษและทรงพลัง มันเป็นไฟล์ปลั๊กอินเฉพาะของธีมโดยพื้นฐาน ซึ่งจะโหลดเมื่อธีมถูกเปิดใช้งานและหยุดทำงานเมื่อธีมถูกปิดใช้งาน หน้าที่หลักของไฟล์นี้คือการเพิ่มฟังก์ชันการทำงานที่กำหนดเองและปรับเปลี่ยนพฤติกรรมหลักของ WordPress โดยไม่ต้องแก้ไขไฟล์หลักหรือสร้างปลั๊กอินแยกต่างหาก ซึ่งหมายความว่านักพัฒนาสามารถจัดการตรรกะการปรับแต่งทั้งหมดของธีมได้อย่างรวมศูนย์ ตั้งแต่การเปิดใช้งานฟังก์ชันพื้นฐาน เช่น ภาพเด่น ไปจนถึงการลงทะเบียนประเภทโพสต์ที่กำหนดเอง การสร้างแผงตัวเลือกธีม และการใช้ฮุคและฟิลเตอร์

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

การกำหนดค่าเริ่มต้นและฟังก์ชันทั่วไปสำหรับฟีเจอร์ธีม

การเปิดใช้งานฟีเจอร์ที่ธีมรองรับ

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

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

if ( ! function_exists( 'mytheme_setup' ) ) {
    function mytheme_setup() {
        // 支持文章和评论的Feed链接
        add_theme_support( 'automatic-feed-links' );
        // 启用文章特色图像功能
        add_theme_support( 'post-thumbnails' );
        // 启用自定义Logo功能
        add_theme_support( 'custom-logo', array(
            'height'      => 100,
            'width'       => 400,
            'flex-height' => true,
            'flex-width'  => true,
        ) );
        // 对文章格式和页面标题的HTML5标记支持
        add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption' ) );
        add_theme_support( 'title-tag' );
    }
}
add_action( 'after_setup_theme', 'mytheme_setup' );

ห่อหุ้มโค้ดการกำหนดค่าไว้ในafter_setup_themeHook เพื่อให้แน่ใจว่ามันจะถูกดำเนินการอย่างถูกต้องเมื่อธีมเริ่มต้นทำงาน

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

การลงทะเบียนเมนูนำทางและแถบด้านข้าง

ธีมที่สมบูรณ์มักรวมถึงเมนูนำทางที่ปรับแต่งได้และพื้นที่วิดเจ็ต (แถบด้านข้าง) ซึ่งจำเป็นต้องใช้register_nav_menus()register_sidebar()ฟังก์ชัน

// 注册主题菜单位置
function mytheme_register_menus() {
    register_nav_menus( array(
        'primary' => __( '主导航菜单', 'mytheme' ),
        'footer'  => __( '底部菜单', 'mytheme' ),
    ) );
}
add_action( 'after_setup_theme', 'mytheme_register_menus' );

// 注册一个小工具区域
function mytheme_widgets_init() {
    register_sidebar( array(
        'name'          => __( '主侧边栏', 'mytheme' ),
        'id'            => 'sidebar-1',
        'description'   => __( '在此添加主侧边栏的小工具。', 'mytheme' ),
        '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>',
    ) );
}
add_action( 'widgets_init', 'mytheme_widgets_init' );

การจัดการคิวของสคริปต์และสไตล์

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

function mytheme_scripts() {
    // 引入主题的主样式表
    wp_enqueue_style( 'mytheme-style', get_stylesheet_uri(), array(), wp_get_theme()->get( 'Version' ) );

// 引入Google Fonts
    wp_enqueue_style( 'mytheme-google-fonts', 'https://fonts.example.com/family=Open+Sans&display=swap', array(), null );

// 引入自定义JavaScript文件,并依赖jQuery
    wp_enqueue_script( 'mytheme-navigation', get_template_directory_uri() . '/js/navigation.js', array( 'jquery' ), wp_get_theme()->get( 'Version' ), true );

// 为脚本局部化数据,将PHP变量安全传递到JavaScript
    wp_localize_script( 'mytheme-navigation', 'mythemeScreenReaderText', array(
        'expand'   => __( '展开子菜单', 'mytheme' ),
        'collapse' => __( '收起子菜单', 'mytheme' ),
    ) );
}
add_action( 'wp_enqueue_scripts', 'mytheme_scripts' );

วิธีนี้ช่วยให้มั่นใจว่าการจัดการการอ้างอิง (เช่น jQuery) ถูกต้อง และสามารถควบคุมตำแหน่งการโหลดสคริปต์ (ส่วนหัวหรือส่วนท้ายของหน้า) ได้อย่างสะดวก สำหรับสไตล์และสคริปต์ของแผงควบคุมแอดมิน ควรใช้admin_enqueue_scriptsฮุก

ใช้ฮุคและตัวกรองเพื่อปรับแต่งอย่างลึกซึ้ง

ทำความเข้าใจ Action และ Filter

ความสามารถในการขยายตัวหลักของ WordPress ขึ้นอยู่กับสถาปัตยกรรมปลั๊กอินของมันเป็นอย่างมาก ซึ่งก็คือฮุค (Hooks) ฮุคแบ่งออกเป็นสองประเภท: แอ็กชัน (Action) และตัวกรอง (Filter) แอ็กชันอนุญาตให้คุณดำเนินโค้ดที่กำหนดเองในช่วงเวลาที่เฉพาะเจาะจง ตัวกรองอนุญาตให้คุณปรับเปลี่ยนข้อมูลที่ส่งผ่านระหว่างกระบวนการทำงานfunctions.phpเป็นสถานที่ที่เหมาะอย่างยิ่งสำหรับการใช้ฮุคเหล่านี้

แนะนำให้อ่าน จากศูนย์ถึงหนึ่ง: คู่มือปฏิบัติจริงในการพัฒนา WordPress ธีมแบบครบวงจร

ตัวอย่างเช่น คุณสามารถใช้wp_headการดำเนินการเพิ่มโค้ดที่ปรับแต่งเองในส่วนของหน้า หรือใช้the_contentตัวกรองเพื่อปรับเปลี่ยนผลลัพธ์ของเนื้อหาบทความ

การสร้างประเภทบทความที่กำหนดเอง

เพื่อสร้างประเภทเนื้อหาที่เกินกว่าค่าเริ่มต้น “บทความ” และ “หน้า” คุณต้องลงทะเบียนประเภทบทความที่กำหนดเอง โดยทั่วไปจะดำเนินการในinitฮุค

function mytheme_register_portfolio() {
    $labels = array(
        'name'               => _x( '作品集', '作品集通用名称', 'mytheme' ),
        'singular_name'      => _x( '作品', '作品单数名称', 'mytheme' ),
        'menu_name'          => __( '作品集', 'mytheme' ),
    );
    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'portfolio' ),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => 5,
        'supports'           => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments' ),
    );
    register_post_type( 'portfolio', $args );
}
add_action( 'init', 'mytheme_register_portfolio' );

การปรับเปลี่ยนคำสั่งค้นหาและผลลัพธ์เริ่มต้น

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

hosting.com 共享主机
高性能,配备 AMD EPYC CPU、NVMe SSD 存储和 LiteSpeed,全天候24小时、全天候的专家内部支持,高级安全措施,包括 SSL、暴力破解、恶意软件和 DDoS 防护,节省高达 73%
// 修改主页查询,排除特定分类
function mytheme_exclude_category_home( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'cat', '-5, -9' ); // 排除ID为5和9的分类
    }
}
add_action( 'pre_get_posts', 'mytheme_exclude_category_home' );

// 修改摘录长度
function mytheme_excerpt_length( $length ) {
    return 30; // 将默认的55词改为30词
}
add_filter( 'excerpt_length', 'mytheme_excerpt_length' );

แนวทางปฏิบัติที่ดีที่สุดด้านความปลอดภัย ประสิทธิภาพ และการบำรุงรักษา

ที่แข็งแกร่งfunctions.phpไฟล์ไม่เพียงแต่ต้องทำงานได้เท่านั้น แต่ยังต้องให้ความสำคัญกับความปลอดภัย ประสิทธิภาพ และความสามารถในการบำรุงรักษาอีกด้วย

แรกสุด ต้องทำการหนีและตรวจสอบข้อมูลที่ผู้ใช้ป้อนเข้ามาทั้งหมด WordPress มีฟังก์ชันความปลอดภัยที่หลากหลาย เช่นesc_html()esc_url()sanitize_text_field()ต้องมั่นใจว่าเมื่อส่งออกข้อมูลไดนามิกใดๆ ไปยังส่วนหน้าเว็บไซต์ จะต้องใช้ฟังก์ชันการหนีที่เหมาะสม

ประการที่สอง ต้องให้ความสำคัญกับการจัดระเบียบโค้ด ไฟล์functions.phpที่มีโค้ดมากกว่าร้อยบรรทัดจะดูแลรักษาได้ยาก แนวทางที่ดีที่สุดคือการทำให้มันเป็น “ตัวโหลด” โดยแยกโค้ดที่มีฟังก์ชันการทำงานต่างกันออกเป็นไฟล์ PHP แยกต่างหากในไดเรกทอรีธีม จากนั้นจึงรวมเข้าไปในfunctions.phpผ่านทางrequire_onceแนะนำ

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

// 在functions.php中组织代码
require_once get_template_directory() . '/inc/theme-setup.php';
require_once get_template_directory() . '/inc/enqueue-scripts.php';
require_once get_template_directory() . '/inc/custom-post-types.php';
require_once get_template_directory() . '/inc/custom-functions.php';

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

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

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

สรุป

functions.phpไฟล์ functions.php เป็นหัวใจและระบบประสาทกลางของการพัฒนา WordPress Theme เริ่มตั้งแต่การสนับสนุนฟังก์ชันเริ่มต้นของธีม การลงทะเบียนเมนูและแถบด้านข้าง การนำเข้าแบบมาตรฐานของสคริปต์และสไตล์ ไปจนถึงการปรับแต่งแบบลึกและไม่รุกล้ำผ่านการดำเนินการและตัวกรอง ไฟล์นี้มอบพลังมหาศาลให้นักพัฒนาในการกำหนดพฤติกรรมของ WordPress การปฏิบัติตามแนวทางการพัฒนาที่ทันสมัย เช่น การเข้ารหัสที่ปลอดภัย การเพิ่มประสิทธิภาพ และการจัดระเบียบแบบแยกส่วน จะทำให้ไฟล์functions.phpของคุณไม่เพียงแต่ทรงพลัง แต่ยังแข็งแกร่ง ง่ายต่อการบำรุงรักษาและขยาย การเข้าใจมันอย่างถ่องแท้ หมายความว่าคุณได้ก้าวจากผู้ใช้ธีมที่กำหนดไว้ล่วงหน้าไปสู่ผู้สร้างธีมที่แท้จริง

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

ธีมลูกจะสามารถปรับเปลี่ยนไฟล์ functions.php ได้อย่างปลอดภัยอย่างไร

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

ทำไมโค้ดที่ฉันเพิ่มจึงไม่ทำงาน

โค้ดไม่ทำงานมีสาเหตุทั่วไปหลายประการ ประการแรก ตรวจสอบข้อผิดพลาดทางไวยากรณ์ ข้อผิดพลาดเล็กน้อยในไวยากรณ์ PHP อาจทำให้functions.phpการดำเนินการไฟล์ล้มเหลวทั้งหมด คุณสามารถเปิดใช้งานWP_DEBUGโหมดเพื่อดูว่ามีข้อความแสดงข้อผิดพลาดหรือไม่ ประการที่สอง ยืนยันว่าโค้ดถูกเพิ่มในตำแหน่งที่ถูกต้องหรือไม่ (เช่น ฟังก์ชันถูกกำหนดไว้ภายในฮุคหรือไม่ และฮุคนั้นไม่ได้ถูกเรียกใช้งาน) ประการที่สาม ตรวจสอบว่ามีความขัดแย้งในชื่อฟังก์ชันหรือชื่อฮุคหรือไม่ ควรเพิ่มคำนำหน้าที่ไม่ซ้ำใครให้กับฟังก์ชันที่กำหนดเอง สุดท้าย ตรวจสอบให้แน่ใจว่าการแก้ไขของคุณได้รับการบันทึกแล้ว และล้างแคชของเบราว์เซอร์และ WordPress เมื่อดูหน้าเว็บ

วิธีเพิ่ม shortcode ที่กำหนดเองใน functions.php

functions.phpการเพิ่ม shortcode ใน WordPress เป็นความต้องการที่พบบ่อยมาก โดยใช้add_shortcode()ฟังก์ชั่นคุณสามารถทำได้อย่างง่ายดาย ก่อนอื่นคุณต้องกำหนดฟังก์ชัน callback เพื่อสร้างเนื้อหาที่จะแสดงผลของ shortcode แล้วใช้add_shortcode()เพื่อลงทะเบียนมัน

// 定义短代码回调函数
function mytheme_contact_button_shortcode( $atts ) {
    // 解析短代码属性
    $atts = shortcode_atts( array(
        'text' =&gt; '联系我们',
        'url'  =&gt; '/contact',
    ), $atts, 'contact_button' );

// 返回安全的HTML输出
    return '<a href="/th/' . esc_url( $atts['url'] ) . '/" class="contact-button">' . esc_html( $atts['text'] ) . '</a>';
}
// ลงทะเบียนชอร์ตโค้ด
add_shortcode( 'contact_button', 'mytheme_contact_button_shortcode' );

หลังจากนั้น คุณก็สามารถใช้[contact_button text="点击联系" url="/contact-us"]เพื่อเรียกใช้ shortcode นี้ในบทความ หน้า หรือวิดเจ็ตได้

เมื่อเปรียบเทียบกับปลั๊กอินอิสระ การเพิ่มฟังก์ชันใน functions.php มีข้อดีข้อเสียอย่างไร

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