워드프레스 자식 테마 functions.php 이전 가이드

워드프레스 자식 테마 functions.php 이전 – 충돌 없이 안전하게

✅ 핵심 답변

자식 테마 functions.php 이전 방법: 부모 functions.php의 커스텀 코드만 자식으로 복사하고, GeneratePress 원본 코드는 절대 복사하면 안 됩니다. 부모와 자식 functions.php는 동시에 실행되므로 중복 코드가 있으면 치명적 오류가 발생합니다.

functions.php는 워드프레스에서 가장 특수한 파일입니다. 일반 PHP 파일은 자식에 있으면 부모 것을 무시하지만, functions.php만은 부모와 자식이 동시에 실행됩니다. 이 특성을 모르고 부모 원본 코드를 자식에 그대로 복사하면 함수 중복 선언 오류로 사이트가 다운됩니다.

이 글에서는 원본 코드와 커스텀 코드를 구분하는 방법, 안전한 이전 순서, 이전 후 확인 방법까지 표와 예시로 명확하게 안내합니다.

📅 최종 업데이트: 2026년 04월 | ✍️ 정보 출처: WordPress 공식 문서 기준


1. functions.php가 특수한 이유

유일하게 둘 다 실행되는 파일

워드프레스의 모든 템플릿 파일(header.php, single.php 등)은 자식에 있으면 부모 것을 완전히 무시합니다. 그러나 functions.php만은 예외로, 자식 functions.php가 먼저 실행되고 이어서 부모 functions.php가 실행됩니다. 이 때문에 같은 함수명이 양쪽에 존재하면 “함수 중복 선언” 치명적 오류가 발생합니다.(출처: WordPress 공식 문서)

  • 일반 PHP 파일: 자식 있으면 부모 무시 (자식 단독 실행)
  • functions.php: 자식 먼저 → 부모 나중 (둘 다 실행)
  • 따라서 자식 functions.php에는 커스텀 코드만 있어야 함

2. 원본 코드 vs 커스텀 코드 구분하기

이 표로 한눈에 구분하세요

부모 functions.php를 열었을 때 어떤 코드가 원본이고 어떤 코드가 내가 추가한 것인지 구분이 어려울 수 있습니다. 아래 표를 참고해 명확히 구분하세요.

구분 GeneratePress 원본 코드 커스텀 코드 (내가 추가한 것)
특징 테마 설치 시부터 있던 코드 내가 직접 추가한 코드
예시 define(‘GENERATE_VERSION’), generate_setup(), require $theme_dir . ‘/inc/…’ SNS 공유 버튼, 관리자 메뉴 추가, 쇼트코드 등록 등
자식으로 복사 ❌ 절대 금지 ✅ 반드시 복사
부모에서 삭제 ❌ 절대 금지 ✅ 반드시 삭제
복사 시 결과 함수 중복 오류 → 사이트 다운 정상 작동, 업데이트 후에도 보존
위치 기준 파일 상단부터 require 구문까지 require 구문 이후 추가된 코드

3. 자식 functions.php 올바른 구조

이 구조만 따르면 충돌 없습니다

자식 functions.php는 enqueue 코드 + 커스텀 코드로만 구성합니다. enqueue 코드는 부모 CSS를 올바른 순서로 로드하기 위한 필수 선언이며, 그 아래에 커스텀 코드를 붙여넣으면 됩니다. GeneratePress의 경우 generate-style이 부모 CSS 핸들명이므로 의존성으로 지정해야 합니다.

  • GeneratePress 원본 코드(define, generate_setup, require) 절대 포함 금지
  • 커스텀 코드는 require 구문 이후에 있던 코드만 복사

📄 자식 functions.php 올바른 예시

<?php
/**
 * 자식 테마 Functions
 */

// 자식 테마 스타일 로드 (필수)
add_action('wp_enqueue_scripts', 'gp_child_enqueue_styles');
function gp_child_enqueue_styles(){
    wp_enqueue_style(
        'child-style',
        get_stylesheet_directory_uri() . '/style.css',
        array('generate-style')
    );
}

// 여기 아래에 커스텀 코드만 붙여넣기
// (SNS 공유버튼, 쇼트코드, 관리자메뉴 등)

❌ 절대 넣으면 안 되는 코드

// 아래 코드들은 자식 functions.php에 넣으면 충돌 발생
define( 'GENERATE_VERSION', '3.3.1' );  // ❌
function generate_setup() { ... }       // ❌
require $theme_dir . '/inc/...';        // ❌

4. 부모 functions.php 원본 복원

커스텀 코드 삭제 후 저장

자식 functions.php에 커스텀 코드 이전이 완료되면 부모 functions.php에서 해당 코드를 삭제해야 합니다. 부모 파일을 열어 마지막 require 구문 이후에 있는 모든 커스텀 코드를 삭제하고 저장합니다. 삭제 후 파일 마지막 줄이 아래처럼 끝나면 정상입니다.

  • 삭제 대상: require $theme_dir . ‘/inc/structure/search-modal.php’; 이후 모든 코드
  • 삭제 후 마지막 줄: require $theme_dir . ‘/inc/structure/search-modal.php’;
  • 삭제 완료 후 저장 → 사이트 정상 확인

⚠️ 부모 functions.php 삭제 전 반드시 백업하세요

부모 functions.php 편집 전 전체 내용을 메모장에 복사해두세요. 삭제 중 실수가 생겨도 즉시 원본으로 복구할 수 있습니다.

5. 이전 후 이상 여부 확인

3가지 항목을 순서대로 확인하세요

커스텀 코드 이전이 완료되면 아래 순서로 정상 작동 여부를 확인합니다. 시크릿 창으로 확인하는 것이 캐시 오염 없이 실제 상태를 볼 수 있는 가장 정확한 방법입니다.

  • ① 시크릿 창(Ctrl+Shift+N)으로 사이트 접속 → 디자인 정상 확인
  • ② 커스텀 기능(SNS 버튼, 쇼트코드 등) 정상 작동 확인
  • ③ 대시보드 → 외모 → 테마 파일 편집기에서 자식 functions.php 내용 최종 확인

결론

워드프레스 functions.php는 부모와 자식이 동시에 실행되는 유일한 파일로, 자식에 원본 코드를 복사하면 반드시 함수 중복 오류가 발생합니다. 자식 functions.php에는 enqueue 코드와 커스텀 코드만 넣고, 부모 functions.php에서는 커스텀 코드를 삭제해 원본 상태로 유지해야 충돌 없이 안전하게 운영할 수 있습니다.

이전 완료 후 시크릿 창에서 사이트와 커스텀 기능을 모두 확인하는 것이 마지막 단계입니다.

💬 Expert Comment functions.php 충돌은 자식 테마 작업 중 가장 흔하게 발생하는 치명적 오류입니다. 부모 테마의 원본 코드와 커스텀 코드를 구분하는 가장 쉬운 방법은 파일 매니저에서 수정 날짜를 확인하는 것입니다. 테마 설치일 이후에 추가된 코드가 커스텀 코드입니다. 커스텀 코드만 자식으로 이전하고 부모를 원본으로 복원하는 것이 자식 테마 운영의 핵심 원칙입니다.

— 워드프레스 PHP 개발 전문가 관점

자주 묻는 질문 (FAQ)

📚 기초

Q1. 자식 테마 functions.php에는 어떤 코드를 넣어야 하나요?

enqueue 코드(부모 CSS 로드 선언)와 직접 추가한 커스텀 코드만 넣어야 합니다. GeneratePress 원본 코드는 절대 포함하면 안 됩니다.

Q2. functions.php가 다른 PHP 파일과 다른 점은 무엇인가요?

다른 파일은 자식에 있으면 부모 것을 무시하지만, functions.php는 자식과 부모가 동시에 실행됩니다. 이 때문에 같은 함수가 양쪽에 있으면 충돌이 발생합니다.

Q3. 부모 functions.php에서 커스텀 코드를 찾는 방법은 무엇인가요?

파일 매니저에서 수정 날짜를 확인하거나, 파일 내에서 마지막 require 구문 이후에 있는 코드가 커스텀 코드입니다.

Q4. enqueue 코드에서 generate-style은 무엇인가요?

GeneratePress가 자체적으로 등록하는 부모 CSS 핸들명입니다. 이를 의존성으로 지정하면 부모 CSS가 먼저 로드된 후 자식 CSS가 로드됩니다.

Q5. 자식 functions.php 이전 후 커스텀 기능이 사라지면 어떻게 하나요?

자식 functions.php에 커스텀 코드가 제대로 붙여넣어졌는지 확인하세요. 코드가 있는데도 작동 안 하면 PHP 문법 오류일 수 있으니 WP_DEBUG로 확인하세요.

⚠️ 주의사항

Q6. GeneratePress 원본 코드를 자식 functions.php에 복사하면 어떤 오류가 나나요?

“Fatal error: Cannot redeclare generate_setup()” 또는 “Constant GENERATE_VERSION already defined” 오류가 발생하며 사이트가 다운됩니다.

Q7. 부모 functions.php에서 커스텀 코드를 삭제하지 않으면 어떻게 되나요?

부모와 자식 둘 다 같은 함수가 실행되어 중복 선언 오류가 발생합니다. 반드시 부모에서 삭제해야 합니다.

Q8. 부모 functions.php 편집 중 실수로 원본 코드를 삭제하면 어떻게 되나요?

사이트가 다운될 수 있습니다. 편집 전 반드시 전체 내용을 메모장에 백업하고, 문제 발생 시 백업 내용으로 즉시 복구하세요.

Q9. 자식 functions.php에 주석처리된 코드가 있으면 문제가 되나요?

일반 주석(// 또는 /* */)은 문제없습니다. 단 주석 블록 내에 */나 특수문자가 잘못 들어가면 PHP 파싱 오류가 발생할 수 있으니 주의하세요.

Q10. 자식 functions.php가 너무 길어지면 분리할 수 있나요?

네. 별도 PHP 파일을 만들고 자식 functions.php에서 require get_stylesheet_directory() . ‘/includes/my-functions.php’; 형태로 불러오면 됩니다.

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.