친절한 우리 고모

친절한 고모의 친절한 이야기

  • 2025. 4. 25.

    by. 친절한 고모

    목차

      🧠 왜 커스텀 포스트 타입(CPT)이 필요한가?

      워드프레스는 본래 블로그 중심 플랫폼이지만,
      이벤트, 포트폴리오, 리뷰, 강의, FAQ, 제품 등
      다양한 콘텐츠를 구조화된 데이터베이스 형태로 관리할 수 있도록
      커스텀 포스트 타입(CPT)을 제공합니다.

      post, page 외에, 나만의 콘텐츠 타입을 만들어
      테이블처럼 정리하고, 출력하고, 검색할 수 있습니다.


      ✅ 커스텀 포스트 타입 예시

      콘텐츠 유형포스트 타입
      포트폴리오 portfolio
      강의 콘텐츠 course
      제품 카탈로그 product
      고객 리뷰 review
      직원 정보 team

      🔧 커스텀 포스트 타입 등록하기

      기본 코드 구조 (functions.php 또는 플러그인 내부)

      php
      복사편집
      function register_my_cpt() { register_post_type('portfolio', array( 'labels' => array( 'name' => '포트폴리오', 'singular_name' => '포트폴리오', ), 'public' => true, 'has_archive' => true, 'rewrite' => array('slug' => 'portfolio'), 'supports' => array('title', 'editor', 'thumbnail', 'excerpt'), 'menu_icon' => 'dashicons-portfolio', )); } add_action('init', 'register_my_cpt');

      📌 이제 관리자에 **‘포트폴리오’**라는 메뉴가 생기며, 별도 아카이브 URL도 생성됩니다.


      🧩 커스텀 필드: 콘텐츠에 ‘속성’을 부여하자

      • 강의 콘텐츠에 “수강 시간”, “강사명”
      • 제품 포스트에 “가격”, “재고”, “SKU”
      • 리뷰 포스트에 “평점”, “구매 링크”

      👉 이것이 커스텀 필드의 역할입니다.
      콘텐츠를 속성 기반의 데이터베이스처럼 구조화할 수 있게 합니다.


      ✅ ACF (Advanced Custom Fields) 플러그인 활용

      설치 후 설정 흐름

      1️⃣ ACF → 필드 그룹 생성
      2️⃣ 필드 추가 (텍스트, 숫자, 날짜 등 다양)
      3️⃣ ‘포스트 타입 = portfolio’일 때 표시되도록 조건 설정
      4️⃣ 템플릿에서 출력

      출력 예시 (테마 파일 내부)

      php
      복사편집
      <?php $client_name = get_field('client_name'); $project_date = get_field('project_date'); ?> <p>클라이언트: <?= esc_html($client_name) ?></p> <p>작업일: <?= esc_html($project_date) ?></p>

      📌 get_field()는 ACF 전용 함수이며, 필드 이름은 슬러그와 동일


      🧱 커스텀 포스트 + 필드 설계 전략 예시

      포스트 타입필드 이름필드 유형
      course duration 숫자 (시간 단위)
      course instructor 텍스트
      portfolio client_name 텍스트
      product price 숫자
      review rating 슬라이더 또는 select

      이렇게 설계하면 워드프레스를 마치 CMS + DB 시스템처럼 활용할 수 있습니다.


      🔎 아카이브/상세 페이지에 CPT 데이터 출력하기

      아카이브 템플릿 예시 (archive-portfolio.php)

      php
      복사편집
      <?php while(have_posts()): the_post(); ?> <h2><?php the_title(); ?></h2> <p><?php the_excerpt(); ?></p> <p>클라이언트: <?= esc_html(get_field('client_name')) ?></p> <?php endwhile; ?>

      싱글 템플릿 예시 (single-portfolio.php)

      → 상세 페이지에 커스텀 필드 정보와 이미지, 링크 배치


      💡 팁: CPT + 필드를 검색, REST API, 조건 출력과 연결하라

      • pre_get_posts 필터로 CPT 검색 결과 포함
      • REST API에 커스텀 필드 노출 (register_rest_field)
      • Elementor, Gutenberg에서 CPT 블록 제작도 가능

      ✅ 구조화 콘텐츠 설계 체크리스트

      항목완료 여부
      register_post_type()로 CPT 등록 ✅ / ❌
      ACF로 필드 그룹 생성 및 연결 ✅ / ❌
      커스텀 템플릿에서 필드 출력 완료 ✅ / ❌
      REST API 또는 쿼리에 CPT 포함 처리 ✅ / ❌
      관리자 UI 최적화 (아이콘, 컬럼 등) ✅ / ❌

      🧠 왜 커스텀 포스트 타입(CPT)이 필요한가?