워드프레스 강좌 / 자식 테마(Child Theme)의 뜻과 만드는 방법, 장단점

자식 테마의 뜻

어떤 테마의 디자인과 기능을 그대로 상속 받는 테마를 자식 테마(Child Theme)라 합니다. 이때 상속해주는 테마를 부모 테마(Parent Theme)라 합니다.

자식 테마 만드는 방법

워드프레스의 기본 테마 중 하나인 Twenty Seventeen의 자식 테마를 만들어보겠습니다.

방법 1

wp-content/themes 폴더에 twentyseventeen-child 폴더를 만듭니다. (폴더 이름은 다른 것으로 해도 상관없습니다.)

twentyseventeen-child 폴더 안에 다음의 내용을 가진 style.css 파일을 만듭니다.

/*
  Theme Name: Twenty Seventeen Child Theme
  Template: twentyseventeen
*/
@import url( "../twentyseventeen/style.css" );
  • Theme Name : 테마의 이름을 값으로 입력합니다. 원하는 이름으로 만드세요.
  • Template : 부모 테마의 폴더 이름을 값으로 입력합니다. 정확히 입력하세요.
  • 마지막 줄에 있는 twentyseventeen은 부모 테마의 폴더 이름입니다.

방법 2

wp-content/themes 폴더에 twentyseventeen-child 폴더를 만듭니다. (폴더 이름은 다른 것으로 해도 상관없습니다.)

twentyseventeen-child 폴더 안에 다음의 내용을 가진 style.css 파일을 만듭니다.

/*
  Theme Name: Twenty Seventeen Child Theme
  Template: twentyseventeen
*/
  • Theme Name : 테마의 이름을 값으로 입력합니다. 원하는 이름으로 만드세요.
  • Template : 부모 테마의 폴더 이름을 값으로 입력합니다. 정확히 입력하세요.

twentyseventeen-child 폴더 안에 다음의 내용을 가진 functions.php 파일을 만듭니다.

<?php
  function theme_enqueue_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
    wp_enqueue_style( 'child-style', get_stylesheet_directory_uri() . '/style.css', array( 'parent-style' ) );
  }
  add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
?>

테마 활성화

이제 [테마 디자인 - 테마]로 가면 테마가 추가된 것을 확인할 수 있고, 활성화할 수 있습니다.

참고

썸네일

테마 목록에 썸네일이 나오게 하고 싶다면 부모 테마의 screenshot.png를 자식 테마로 복사해 넣으면 됩니다.

테마 정보

style.css에 추가할 수 있는 내용은 더 많습니다.

/*
  Theme Name:     xxxx
  Theme URI:      xxxx
  Description:    xxxx
  Author:         xxxx
  Author URI:     xxxx
  Template:       xxxx
  Version:        xxxx
*/

이 중에서 Theme Name과 Template만 필수이고, 나머지는 옵션입니다.

방법 1과 방법 2

방법 2가 만들기에는 번거롭지만, 방법 1보다 방법 2가 성능면에서 더 좋다고 합니다.

자식 테마 작동 방식

자식 테마에 없는 파일은 부모 테마의 것을 사용합니다.

  • index.php 파일이 필요하다면 자식 테마에서 먼저 찾은 후, 없으면 부모 테마에서 찾습니다.
  • header.php 파일이 필요하다면 자식 테마에서 먼저 찾은 후, 없으면 부모 테마에서 찾습니다.

단, functions.php는 예외입니다. 부모 테마의 functions.php에 자식 테마의 functions.php를 추가합니다.

자식 테마의 수정

스타일 수정

일반적으로 스타일만 수정할 것이라면 style.css에 수정할 코드를 넣으면 됩니다. (테마에 따라 수정할 곳이 다를 수 있습니다.)

템플릿

템플릿을 수정하고 싶다면, 수정하려는 템플릿을 자식 테마의 폴더로 복사한 후 수정합니다.

예를 들어 header.php를 수정하고 싶다면, 부모 테마에 있는 header.php를 자식 테마의 폴더로 복사한 후 수정합니다.

functions.php

자식 테마의 functions.php에 코드를 추가합니다.

부모 테마의 functions.php를 복사해오면 안됩니다. 부모 테마의 functions.php 내용에 자식 테마의 functions.php 내용을 추가하기 때문입니다.

장점

테마를 업데이트하면 기존 내용이 사라지고 새 테마가 설치됩니다. 따라서 부모 테마를 직접 수정했다면, 테마를 업데이트했을 때 수정했던 것이 다 사라집니다.

하지만 자식 테마를 사용하면, 수정은 자식 테마에서 하므로 수정한 내용을 유지할 수 있습니다.

단점

예를 들어 부모 테마에서 자식 테마로 header.php를 복사한 후, 부모 테마의 업데이트로 header.php가 변경되었을 때, 자식 테마에는 그 내용이 반영되지 않습니다.

따라서 템플릿 파일을 자식 테마에서 수정했다면 부모 테마를 업데이트했을 때 문제가 발생할 수 있습니다. 만약 문제가 발생하지 않더라도 보안 업데이트 등 중요한 변화를 놓칠 수 있습니다.

자식 테마를 사용할까 말까?

스타일을 수정하거나, 부모 테마에 없는 것을 추가하는 경우에는 자식 테마를 사용하는 게 좋습니다.

만약 부모 테마에 있는 템플릿 파일 등 주요 파일을 수정하는 경우라면 자식 테마 사용에 주의를 기울여야 합니다. 테스트 사이트를 만들어서, 부모 테마를 업데이트를 했을 때 문제가 없는지 꼭 확인해야 합니다.

같은 카테고리의 다른 글

워드프레스 강좌 / Crayon Syntax Highlighter / 글 목록에서 코드 제거하는 방법

워드프레스 강좌 / Crayon Syntax Highlighter / 글 목록에서 코드 제거하는 방법

Crayon Syntax Highlighter은 워드프레스에서 사용하는 코드 하이라이트 플러그인입니다. 최근엔 업데이트가 별로 없지만, 사용에는 문제가 없습니다. Crayon Syntax Highlighter를 사용하면 한 가지 문제가 발생합니다. 글 시작 부분에 코드가 있으면 글 목록에서 그 코드가 나온다는 것입니다. 글 목록에 텍스트만 출력되는 상황이라면 그리 보기 싫지는 않지만, 썸네일이 들어가거나 2열로 배열한다면 모양이 이상해질 수 있습니다. CSS로 ...

워드프레스 / 플러그인 / KBoard / 일대일(1:1) 상담 게시판 만드는 방법

워드프레스 / 플러그인 / KBoard / 일대일(1:1) 상담 게시판 만드는 방법

인터넷 쇼핑몰이나 서비스에 일대일 상담 기능이 있습니다. 질문자 입장에서는 나의 문의나 정보가 다른 사람에게 공개되지 않고, 판매자 입장에서는 제품 또는 서비스의 문제점이나 오류가 알려지는 것을 방지할 수 있다는 장점이 있습니다. 워드프레스에 일대일 상담 기능을 제공하는 플러그인이 여러 가지가 있는데, KBoard를 이용해서 구현할 수도 있습니다. 무료이기도 하고, 이미 KBoard로 게시판을 운영하고 있다면 ...

워드프레스 강좌 / 플러그인 / Schema / 구조화된 데이터 만들어주는 플러그인

워드프레스 강좌 / 플러그인 / Schema / 구조화된 데이터 만들어주는 플러그인

구조화된 데이터 SEO와 관련해서 해야 할 것 중의 하나가 구조화된 데이터를 만드는 것입니다. 구조화된 데이터는 콘텐츠에 관련된 정보를 검색 엔진에 알려주는 역할을 합니다. 만약 구조화된 데이터가 없으면 구글 웹마스터도구에서 다음과 같은 메시지를 보여줍니다. 사이트에 구조화된 데이터가 없습니다. 구조화된 데이터은(는) Google에서 사이트의 콘텐츠를 파악하여 검색결과에 리치 스니펫을 표시하는 데 도움을 줍니다. 구조화된 데이터는 HTML 마크업을 ...

워드프레스 강좌 / 카테고리

워드프레스 강좌 / 카테고리

카테고리 워드프레스의 글(포스트)은 카테고리로 분류합니다. 글은 적어도 하나 이상의 카테고리에 속하게 됩니다. 글 작성시 카테고리를 선택하지 않으면 기본 카테고리가 선택됩니다. 카테고리 관리는 에서 합니다. 글 작성 화면에서도 카테고리 관리를 할 수 있지만, 상세한 설정을 할 수는 없습니다. 카테고리 만들기 로 이동하면 다음과 같은 화면이 나옵니다. 이름 등을 입력하고 [새 카테고리 ...

워드프레스 강좌 / 플러그인 설치하기, 삭제하기

워드프레스 강좌 / 플러그인 설치하기, 삭제하기

플러그인을 설치하는 방법 플러그인을 설치하는 방법은 세 가지가 있습니다. 웹에서 바로 설치하기 ZIP 파일 업로드하여 설치하기 FTP로 업로드하여 설치하기 WordPress.ORG에서 공유되는 플러그인은 보통 1번 방식으로 설치합니다. WordPress.ORG에서 공유되지 않는 플러그인은 2번 또는 3번 방식으로 설치합니다. 웹에서 바로 설치하기 에서 설치하려는 플러그인을 찾습니다. 추천, 인기 등에서 널리 쓰이는 플러그인을 볼 수 있고, 검색을 통해서 원하는 ...

워드프레스 강좌 / 사용자 정의 필드 입력하고 출력하기

워드프레스 강좌 / 사용자 정의 필드 입력하고 출력하기

사용자 정의 필드 사용자 정의 필드를 이용하여 글에 추가적인 정보를 입력하고 출력할 수 있습니다. 그 정보를 글 본문에 직접 입력할 수도 있지만, DB에 저장하면 출력하는 것 이외에도 여러 가지로 활용 가능하다는 장점이 있습니다. 사용자 정의 필드 입력하기 사용자 정의 필드는 글 쓰는 화면에서 입력합니다. 사용자 정의 필드를 입력하는 폼이 보이지 않는다면, 화면 옵션에서 ...

워드프레스 강좌 / 메뉴 만들고 배치하기

워드프레스 강좌 / 메뉴 만들고 배치하기

워드프레스는 페이지, 글, 카테고리, 태그, 사용자 정의 링크 등으로 메뉴를 만들 수 있습니다. 그리고 그 메뉴는 테마가 제공하는 위치에 배치를 합니다. 하나의 메뉴를 여러 곳에 배치할 수도 있고, 위젯에 추가하는 것도 가능합니다. 메뉴 생성과 관리는 에서 합니다. 화면 옵션 메뉴에 추가할 수 있는 아이템은 여러 가지가 있습니다. 그리고 테마나 플러그인으로 ...

워드프레스 강좌 / 우커머스 / 한글 번역 수정하는 방법

워드프레스 강좌 / 우커머스 / 한글 번역 수정하는 방법

우커머스를 설치하면 한글 번역 파일도 같이 설치됩니다. 예전에는 번역률이 낮아서 사용이 어려웠는데, 지금은 많은 분들의 도움으로 번역률이 100%입니다. 하지만, 일부 번역은 마음에 들지 않을 수 있고, 쇼핑몰 특성 상 더 좋은 번역이 있을 수도 있습니다. 그럴 경우 우커머스의 번역을 수정하여 사용할 수 있습니다. Loco Translate 설치 번역 플러그인 Loco Translate를 설치하고 활성화합니다. 기본 사용법 : Loco ...

워드프레스 강좌 / Smush / 이미지 압축, 최적화 플러그인

워드프레스 강좌 / Smush / 이미지 압축, 최적화 플러그인

워드프레스에 이미지를 업로드하면 썸네일을 만듭니다. 예를 들어 image.png를 업로드하면 image-150x150.png 같은 파일이 만들어지는 것이죠. 문제는 한 개만 만드는 것이 아니라는 것입니다. 워드프레스 미디어 설정에 있는 세 가지 썸네일은 기본으로 만들고, 테마에서 요구하는 썸네일, 플러그인에서 요구하는 썸네일 등을 잔뜩 만듭니다. 따라서 이미지를 한 개 업로드해도 여러 개의 썸네일 때문에 디스크 용량을 ...

워드프레스 / 우커머스 / 잡다한 정보들

상품 페이지 라이트박스 제거 functions.php에 다음 코드 추가 add_filter( 'woocommerce_single_product_image_thumbnail_html', 'wc_remove_link_on_thumbnails' ); function wc_remove_link_on_thumbnails( $html ) { return strip_tags( $html, '<img>' ); } 우커머스 스타일 제거 functions.php에 다음 코드 추가 add_filter( 'woocommerce_enqueue_styles', '__return_empty_array' ); 관련 상품 제거 CSS에 다음 코드 추가 .single-product .related.products { display: none; } Database Pending 작업 실행하는 방법 예약된 데이터베이스 작업이 진행되지 않는다면 강제로 실행할 수 있습니다. ...