워드프레스 테마 개발을 처음부터 배우기: 개인화된 웹사이트를 만들기 위한 핵심 가이드

4분 읽기
2026-03-13
2026-06-05
2,089
아래 링크를 통해 쇼핑하면 추가 비용 없이 수수료를 받을 수 있습니다.

워드프레스 테마 개발의 핵심 개념.

코드를 자세히 살펴보기 전에, WordPress 테마를 구성하는 기본 요소들을 이해하는 것이 매우 중요합니다. 테마는 단순히 PHP와 CSS 파일의 모음이 아니라, 특정 구조를 따르며 WordPress 코어와 긴밀하게 상호작용하는 애플리케이션입니다. 그 핵심은 템플릿 계층 시스템(Template Hierarchy System)으로, 이 시스템이 WordPress가 현재 접속 중인 페이지의 유형(홈페이지, 글 페이지, 페이지, 카테고리 아카이브 등)에 따라 적절한 템플릿 파일을 어떻게 선택하고 렌더링할지를 결정합니다.

가장 기본적인 테마는 두 개의 파일을 포함해야 합니다:style.css그리고index.php그중에서,style.css스타일시트뿐만 아니라, 특정 테마의 “신분증”과도 같은 역할을 합니다. 이 파일의 헤더에 있는 주석 블록에는 테마의 이름, 작성자, 설명, 버전 등의 메타정보가 포함되어 있습니다.index.php이 파일은 기본 템플릿 파일로, 더 구체적인 템플릿 파일이 없을 경우 WordPress가 이 파일을 사용하도록 설정되어 있습니다.

주제는 일련의 표준화된 템플릿 파일을 통해 콘텐츠를 구성합니다. 예를 들어…single.php단일 기사를 표시하는 데 사용됩니다.page.php독립적인 페이지를 표시하는 데 사용됩니다.archive.php기사 아카이브 목록을 표시하는 데 사용됩니다. 개발의 핵심은 WordPress가 제공하는 다양한 내장 함수들을 이해하고 활용하는 데 있습니다.the_title()the_content()wp_head()그리고wp_footer()이러한 함수들은 데이터베이스에서 데이터를 추출하여 안전하게 페이지에 출력합니다. 이는 테마의 외관과 웹사이트 콘텐츠를 연결하는 중요한 역할을 합니다.

추천 읽기 나에게 맞는 WordPress 테마 선택 및 맞춤 설정

Build your first topic: Basic File Structure

자, “MyFirstTheme”이라는 이름의 미니멀한 테마를 만들어 보며 개발 프로세스에 익숙해져 봅시다. 먼저, WordPress의 설치 디렉터리 내에서…wp-content/themes/아래에서 새 폴더를 만들고, 그 이름을 ‘New Folder’로 지정하세요.myfirsttheme

UltaHost의 WordPress 호스팅 서비스
30일 환불 보장, 무제한 대역폭 및 데이터베이스 이용, 무료 DDoS 보호 서비스 제공. 3년 구매 시 50% 용량이 할인됩니다.

스타일시트 파일을 생성하세요.

먼저 주제 정보 헤더 파일을 생성하세요.style.css이 파일은 주제에 대한 메타데이터를 정의하고 있습니다.

/*
Theme Name: MyFirstTheme
Theme URI: https://yourdomain.com/
Author: Your Name
Author URI: https://yourdomain.com/
Description: 一个用于学习WordPress主题开发的简洁主题。
Version: 1.0
License: GPL v2 or later
Text Domain: myfirsttheme
*/

Text Domain국제화를 위해 사용되며, 후속 번역 기능을 준비하기 위함입니다. 이 작업이 끝나면 웹사이트의 CSS 스타일을 작성할 수 있습니다.

핵심 템플릿 파일을 생성합니다.

다음으로, 기본적인 것을 만들어봅시다.index.php파일입니다. 이곳이 전체 주제에 대한 입구입니다.

<!DOCTYPE html>
<html no numeric noise key 1013>
<head>
    <meta charset="<?php bloginfo('charset'); ?>">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    
</head>
<body no numeric noise key 1010>
    <header>
        <h1><a href="/ko/</?php echo esc_url(home_url('/')); ?>"><?php bloginfo('name'); ?></a></h1>
        <p><?php bloginfo('description'); ?></p>
    </header>

<main>
        만일 게시물이 있다면: while (게시물이 있다면): the_post(); ?&gt;
            <article>
                <h2></h2>
                <div></div>
            </article>
        
    </main>

<footer>
        <p>©</p>
    </footer>
    
</body>
</html>

이 코드는 완전한 HTML5 페이지 구조를 생성합니다.wp_head()그리고wp_footer()후크(hook)를 사용하면 플러그인과 테마가 페이지의 상단 및 하단에 코드(예: CSS, JS)를 삽입할 수 있습니다.body_class()이 함수는 일련의 CSS 클래스 이름을 출력하여 조건부 스타일 설정을 용이하게 합니다.the_post()함수는 반복문 내에서 전역 변수를 설정합니다.$post변수를 사용하여…the_title()그리고the_content()현재 글의 데이터를 올바르게 출력할 수 있습니다.

추천 읽기 전문 웹사이트 만들기: WordPress 테마 선택 및 커스터마이징을 위한 최고의 가이드

기능 파일을 가져오기

비록 하나만 존재한다 하더라도…style.css그리고index.php해당 테마는 이미 작동할 수 있지만, 일반적인 테마는 여러 구성 요소를 포함합니다.functions.php이 파일은 템플릿 파일이 아니라, 테마의 “기능 플러그인”입니다. 이 플러그인을 사용하면 WordPress의 다양한 액션 후크(Action Hook)와 필터 후크(Filter Hook)에 함수를 추가할 수 있습니다.

Createfunctions.php이 파일은 주제 기능을 추가하고 스타일시트 및 스크립트를 순차적으로 로드하는 데 사용됩니다.

<?php
// 添加主题支持功能
function myfirsttheme_setup() {
    // 让WordPress管理文档标题
    add_theme_support('title-tag');
    // 启用文章和评论的RSS feed链接
    add_theme_support('automatic-feed-links');
    // 启用文章缩略图(特色图像)
    add_theme_support('post-thumbnails');
    // 添加对HTML5标记的支持
    add_theme_support('html5', array('search-form', 'comment-form', 'comment-list', 'gallery', 'caption'));
    // 注册一个主导航菜单
    register_nav_menus(array('primary' => __('主导航菜单', 'myfirsttheme')));
}
add_action('after_setup_theme', 'myfirsttheme_setup');

// 排队引入样式表
function myfirsttheme_scripts() {
    // 引入主题的主样式表
    wp_enqueue_style('myfirsttheme-style', get_stylesheet_uri());
    // 可以引入Google Fonts或其他CSS
    // wp_enqueue_style('myfirsttheme-google-fonts', 'https://fonts.googleapis.com/css?family=...');
}
add_action('wp_enqueue_scripts', 'myfirsttheme_scripts');

통과합니다.add_theme_support()이 함수를 통해 현대적인 WordPress 테마에서 흔히 사용되는 기능들을 활성화했습니다.wp_enqueue_style()이것은 스타일시트를 올바르게 도입하는 표준 방법으로, 의존 관계를 관리하고 중복 로딩을 방지하는 데 도움을 줍니다.

호스팅닷컴 공유 호스팅
AMD EPYC CPU, NVMe SSD 스토리지 및 LiteSpeed를 통한 고성능, 연중무휴 24시간 전문가 사내 지원, SSL, 무차별 공격, 멀웨어 및 DDoS 보호를 포함한 고급 보안 조치, 최대 73%의 비용 절감.

고급 개발: 템플릿 컴포넌트와 반복 제어

주제의 기본 기능이 완성된 후에는 코드의 유지보수성과 재사용성을 높이기 위해 템플릿 구성 요소와 보다 정교한 반복 제어 기법을 배워야 합니다.

템플릿 컴포넌트를 사용하여 코드를 분할합니다.

"将"index.php페이지 헤더, 페이지 푸터, 사이드바와 같은 공통적인 부분들을 별도의 템플릿 파일로 분리하는 것이 표준적인 관행입니다.header.phpfooter.php그리고sidebar.php

"将"index.php중국<body>태그 앞에 있는 모든 코드를 다음 위치로 이동하세요:header.php</body>그리고</html>태그 앞에 있는 모든 코드(페이지 하단 내용을 포함하여)wp_footer()) 이동하기footer.php그런 다음,index.php중국에서 사용하세요.get_header()그리고get_footer()함수를 사용하여 그것들을 가져옵니다.

추천 읽기 개발부터 배포까지: 전문급 WordPress 테마를 구축하고 최적화하는 방법

수정된index.php본문의 내용은 다음과 같습니다:

<main>
    만일 게시물이 있다면: while (게시물이 있다면): the_post(); ?&gt;
        <article>
            <h2></h2>
            <div></div>
        </article>
    
        <p><?php _e('抱歉,没有找到任何内容。', 'myfirsttheme'); ?></p>
    
</main>

커스텀 페이지 템플릿을 생성합니다.

WordPress에서는 특정 페이지에 맞춤형 템플릿을 만들 수 있습니다. 예를 들어, 전체 화면을 채우는 페이지 템플릿을 만들 수도 있습니다. 새로운 PHP 파일을 생성하세요.template-fullwidth.php파일의 시작 부분에 다음과 같은 템플릿 이름에 대한 주석을 추가하세요:

InterServer 공유 호스팅
공유 호스팅 월 $2.50 USD, 첫 달 $0.1 USD 프로모션 코드 tryinterserver, 461개 클라우드 앱 스크립트, 원클릭 설치.
<?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></h1>
            <div class="entry-content">
                
            </div>
        </article>
    
</main>

페이지를 생성하거나 편집할 때, “페이지 속성”의 “템플릿” 드롭다운 목록에서 “전체 너비 페이지 템플릿”을 선택할 수 있습니다. 이는 템플릿 시스템의 유연성을 잘 보여줍니다.

주循环과 사용자 정의 쿼리를 제어합니다.

Inarchive.php또는 분류 페이지에서는 메인 루프의 동작을 수정해야 할 수 있습니다. 사용 방법은 다음과 같습니다:WP_Query클래스는 사용자 정의 쿼리를 생성할 수 있습니다.

// 示例:在模板中查询特定分类下的 sticky 文章
 'news',
    'post__in' =&gt; get_option('sticky_posts'),
    'posts_per_page' =&gt; 3
));
if ($sticky_query-&gt;have_posts()) :
    while ($sticky_query-&gt;have_posts()) : $sticky_query-&gt;the_post();
        // 输出文章内容
        the_title('<h3>', '</h3>');
        the_excerpt();
    endwhile;
    wp_reset_postdata(); // 重置全局$post数据
endif;
?&gt;

커스텀 쿼리 루프가 끝난 후에 반드시 사용해야 합니다.wp_reset_postdata()전역 변수가 메인 루프의 상태로 복원되도록 하여 후속 기능에서 오류가 발생하지 않도록 해야 합니다.

주제 최적화 및 모범 사례

개발이 완료된 후에는 테마의 안정성(robustness), 보안성(security), 그리고 성능(performance)을 확인하는 것이 출시 전의 마지막 단계입니다.

보안성과 국제화를 확보하기 위해…

모든 동적으로 생성되는 콘텐츠는 반드시 이스케이프 처리되어야 합니다. WordPress에서 제공하는 이스케이프 함수를 사용하십시오.esc_html()esc_attr()esc_url()对于翻译工作,我们会采用专业的翻译方法和工具来确保准确性和流畅性。__()문자열 번역을 수행하려면 해당 도구나 서비스를 사용해야 합니다._e()이전에 우리는…functions.php텍스트 필드가 이미 설정되어 있습니다.myfirsttheme

// 정확한 예시
echo '<a href="/ko/' . esc_url($user_profile_link) . '/">'`. esc_html($user_name)`.'</a>';
// 国际化示例
submit_button(__('保存更改', 'myfirsttheme'));

툴바 영역 추가

사이드바(Sidebar)는 WordPress의 고전적인 기능입니다.functions.php사이드바에 작은 도구 영역을 등록하세요.

function myfirsttheme_widgets_init() {
    register_sidebar(array(
        'name' =&gt; __('主侧边栏', 'myfirsttheme'),
        'id' =&gt; 'sidebar-1',
        'description' =&gt; __('在此添加小工具。', 'myfirsttheme'),
        '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', 'myfirsttheme_widgets_init');

그런 다음sidebar.php중, 사용dynamic_sidebar()그것을 호출하는 함수.

<?php if (is_active_sidebar('sidebar-1')) : ?>
    <aside>
        <?php dynamic_sidebar('sidebar-1'); ?>
    </aside>
<?php endif; ?>

성능 최적화를 위한 고려사항

테마의 로딩 속도를 최적화하는 것은 매우 중요합니다. CSS와 JavaScript 파일이 올바르게 병합되고 압축되도록 해야 하며, 이 작업은 일반적으로 Webpack이나 Gulp와 같은 빌드 도구를 사용하여 개발 단계에서 수행됩니다.add_image_size()적절한 이미지 크기를 설정하여 프론트엔드에서 과도하게 큰 원본 이미지가 로드되는 것을 방지하세요. 스크립트의 경우, 필요하지 않을 때는 사용을 자제하세요.wp_dequeue_script()스크립트를 제거하고, 페이지 하단에서 스크립트가 로드되도록 하세요(스크립트를 페이지 하단에 배치함으로써).wp_enqueue_script()마지막 매개변수를 다음과 같이 설정합니다:true)。

요약

WordPress 테마 개발은 템플릿 계층 구조나 훅 함수와 같은 핵심 개념을 이해하는 것부터 시작하여, 기본 파일 구조를 구축하고, 템플릿 컴포넌트와 사용자 정의 쿼리를 활용한 모듈화된 설계를 진행하며, 마지막으로 보안 강화와 성능 최적화를 단계적으로 수행하는 체계적인 과정입니다. WordPress의 공식 코딩 표준과 모범 사례를 준수함으로써 개발자는 시각적으로도 우수하고 효율적이며, 안전하며 유지보수가 용이한 테마를 만들 수 있습니다. 가장 중요한 것은 지속적인 실습입니다. 처음에는 간단한 프로젝트부터 시작하여 점차 경험을 쌓아가는 것이죠.index.php그리고style.css시작해서 점차 더 복잡한 템플릿 파일들을 사용해 보세요.functions.php이 기능들을 활용하면, 궁극적으로 사용자의 요구사항에 완벽하게 맞는 맞춤형 웹사이트를 제작할 수 있게 될 것입니다.

자주 묻는 질문

프로그래밍 경험이 없어도 WordPress 테마 개발을 배울 수 있습니까?

물론 가능합니다만, 기초 지식을 배우는 데 시간이 필요합니다. 먼저 HTML과 CSS를 익히는 것이 좋습니다. 이 두 가지는 웹페이지의 외관을 구성하는 데 필수적인 기술들입니다. 그 다음에 PHP 문법을 점차적으로 배워나가세요. 왜냐하면 WordPress의 핵심 부분은 PHP로 작성되어 있기 때문입니다. 마지막으로, WordPress에 특화된 함수와 훅(hook)들을 활용하여 개발을 진행하면 됩니다. 기존 테마를 수정하는 것부터 시작하는 것이 학습에 매우 좋은 방법입니다.

`functions.php` 파일은 워드프레스 테마의 핵심 구성 요소 중 하나로, 테마의 전반적인 기능과 동작을 정의하는 데 사용됩니다. 이 파일에는 테마의 메뉴 구조, 페이지 레이아웃, 콘텐츠 형식, 스타일 시트 설정 등이 포함됩니다. `functions.php` 파일은 테마 개발자가 테마의 기능

functions.php이 기능은 테마의 외관 및 표현과 밀접하게 관련되어 있으며, 사용자가 테마를 전환할 때 중요한 역할을 합니다.functions.php해당 기능은 테마를 변경하면 사용할 수 없게 됩니다. 반면 플러그인은 일반적으로 테마와 독립적으로 작동하며, 웹사이트에 특정 기능(예: 연락처 양식, SEO 최적화 등)을 추가하기 위해 설계되었습니다. 따라서 테마를 바꿔도 플러그인의 기능은 그대로 유지됩니다. 특정 기능이 테마의 시각적 디자인과 관련이 없다면, 플러그인으로 구현하는 것이 더 적합합니다.

왜 제 사용자 정의 페이지 템플릿이 드롭다운 목록에 표시되지 않나요?

제가 도와드릴 수 있는 내용이 있을까요? 사용 중에 어떤 문제가 발생하셨나요?.php후缀를 추가했으며, WordPress의 관리자 페이지를 통해 캐시를 삭제한 후에 페이지를 새로고침했습니다.

내 테마가 서브테마(Child Theme)를 지원하도록 설정하는 방법은 무엇인가요?

주제를 하위 주제를 통해 안전하게 사용자 정의할 수 있도록 하기 위해, 개발 시 다음과 같은 규칙을 준수해야 합니다:get_template_directory_uri()부제목에서는 상위 주제의 리소스를 인용하는 데 사용됩니다.get_stylesheet_directory_uri()복사 가능한 함수를 다음과 같이 패키징하세요:if (!function_exists(‘…’))조건문 내에서: 문서에는 해당 주제가 하위 주제를 지원함이 명확히 설명되어 있으며, 기본적인 하위 주제들도 제공됩니다.style.css예시.

개발 주제를 만들 때 반드시 준수해야 할 코딩 규범은 무엇인가요?

강력히 따르실 것을 권장합니다.WordPress 공식 PHP 코딩 표준그리고CSS 코딩 표준이에는 문자열을 정의할 때 작은 따옴표(`'`)를 사용하는 것(변수를 파싱할 필요가 없는 경우에만), 들여쓰기를 위해 공백을 사용하는 것, 대괄호 `{}`의 줄 바꿈 스타일, 함수 및 변수의 이름을 소문자와 밑줄 `_`로 구성하는 것 등이 포함됩니다. 이러한 규칙을 준수하면 다른 개발자들이 코드를 더 쉽게 이해하고 받아들일 수 있으며, 특히 코드를 공식 디렉터리에 제출할 때 유용합니다.