STAGE 12 · Lv.60
다이나믹 템플릿 제작
템플릿 계층구조 실전, 아카이브 템플릿, 싱글 템플릿, WP_Query 커스텀 쿼리, 페이지네이션 구현을 배웁니다.
동적 템플릿의 개념
하나의 템플릿으로 수백 페이지를 생성
다이나믹 템플릿은 WordPress의 루프(Loop)와 템플릿 태그를 활용하여 데이터베이스의 콘텐츠를 동적으로 표시하는 PHP 템플릿입니다. 하나의 single.php 파일로 수백 개의 글 페이지가 자동으로 생성됩니다.
이전 레슨에서 배운 커스텀 포스트 타입과 ACF 필드를 실제 템플릿에서 활용하는 방법을 실습합니다.
아카이브 템플릿 (archive-portfolio.php)
<?php
/**
* 포트폴리오 아카이브 템플릿
* 차일드 테마: archive-portfolio.php
*/
get_header();
?>
<main class="site-main portfolio-archive">
<div class="container">
<!-- 페이지 헤더 -->
<header class="archive-header">
<h1 class="archive-title">
<?php
if (is_tax('portfolio_category')) {
echo '카테고리: ' . single_term_title('', false);
} elseif (is_tax('portfolio_tag')) {
echo '태그: ' . single_term_title('', false);
} else {
echo '포트폴리오';
}
?>
</h1>
<p class="archive-description">우리가 만든 작업물들을 확인하세요.</p>
</header>
<!-- 카테고리 필터 -->
<nav class="portfolio-filter">
<a href="<?php echo get_post_type_archive_link('portfolio'); ?>"
class="filter-btn <?php echo !is_tax() ? 'active' : ''; ?>">전체</a>
<?php
$terms = get_terms(array(
'taxonomy' => 'portfolio_category',
'hide_empty' => true,
));
foreach ($terms as $term) {
$active = (is_tax('portfolio_category', $term->slug)) ? 'active' : '';
printf(
'<a href="%s" class="filter-btn %s">%s (%d)</a>',
get_term_link($term),
$active,
esc_html($term->name),
$term->count
);
}
?>
</nav>
<!-- 포트폴리오 그리드 -->
<?php if (have_posts()) : ?>
<div class="portfolio-grid">
<?php while (have_posts()) : the_post(); ?>
<article class="portfolio-card">
<!-- 썸네일 -->
<?php if (has_post_thumbnail()) : ?>
<a href="<?php the_permalink(); ?>" class="portfolio-thumbnail">
<?php the_post_thumbnail('medium_large'); ?>
<div class="portfolio-overlay">
<span class="view-project">자세히 보기</span>
</div>
</a>
<?php endif; ?>
<!-- 정보 -->
<div class="portfolio-info">
<!-- 카테고리 -->
<?php
$categories = get_the_terms(get_the_ID(), 'portfolio_category');
if ($categories) {
echo '<span class="portfolio-category">';
echo esc_html($categories[0]->name);
echo '</span>';
}
?>
<h2 class="portfolio-title">
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</h2>
<!-- ACF 필드: 클라이언트 이름 -->
<?php if ($client = get_field('client_name')) : ?>
<p class="portfolio-client">Client: <?php echo esc_html($client); ?></p>
<?php endif; ?>
</div>
</article>
<?php endwhile; ?>
</div>
<!-- 페이지네이션 -->
<nav class="pagination">
<?php
the_posts_pagination(array(
'mid_size' => 2,
'prev_text' => '← 이전',
'next_text' => '다음 →',
));
?>
</nav>
<?php else : ?>
<div class="no-results">
<p>등록된 포트폴리오가 없습니다.</p>
</div>
<?php endif; ?>
</div>
</main>
<?php get_footer(); ?>
🔒
여기까지는 미리보기입니다
다이나믹 템플릿 제작
무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.
Google로 3초 만에 시작 →🧵 Threads로 시작무료 공개 강의 둘러보기 (Lv.1~3)무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.