WordPress 설치하면 기본 테마에 더미 콘텐츠가 가득하다. 깔끔한 기술 블로그로 바꾸려면 카테고리 정리, 메뉴, 레이아웃, 폰트 등 할 일이 많다. Site Editor로 세팅하다가 한계를 만나서 REST API로 돌파한 기록이다.
Phase 1: REST API로 기본 정리
카테고리를 여러 개 한 번에 만들고, 기본 더미 콘텐츠를 삭제하는 건 REST API가 훨씬 빠르다.
# 카테고리 생성
curl -s -u "사용자:앱비밀번호" -X POST \
"https://사이트/wp-json/wp/v2/categories" \
-H "Content-Type: application/json" \
-d '{"name":"IT 개발 노트","slug":"dev-notes"}'
# Hello world! 영구 삭제
curl -s -u "사용자:앱비밀번호" -X DELETE \
"https://사이트/wp-json/wp/v2/posts/1?force=true"
?force=true를 안 붙이면 휴지통으로만 가고 영구 삭제가 안 된다.
Phase 2: 테마 커스터마이징
Additional CSS로 적용한 것:
| 항목 | 적용값 | 이유 |
|---|---|---|
| 본문 폰트 | LINE Seed KR | 한국어 가독성 |
| 코드 블록 | Catppuccin Mocha (#1e1e2e) | 다크 테마 가독성 |
| 레이아웃 | 768px 1컬럼 | 한줄 35~40자 최적 |
| 폴백 폰트 | Pretendard → Noto Sans KR | 로드 실패 대비 |
Site Editor 스타일 패널만으로는 웹폰트 로딩이나 코드 블록 테마를 못 건드린다. Additional CSS는 테마 업데이트에도 유지되니까 여기서 처리했다.
문제 1: Blog Home 템플릿에 블록 추가가 안 됨
Post Terms 블록을 Group 안에 넣으려 했는데, Group 바깥에만 추가되고 안으로 이동이 안 됐다. 드래그, Cut/Paste, Insert before 전부 안 됨.
Twenty Twenty-Five 테마의 Post Template 안에 중첩 Group 블록이 있어서 Site Editor의 삽입이 제한되는 거였다.
해결: REST API로 템플릿 HTML을 직접 교체.
# 현재 템플릿 확인
curl -s -u "사용자:앱비밀번호" \
"https://사이트/wp-json/wp/v2/templates/twentytwentyfive//home" \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d['content']['raw'])"
WordPress 템플릿은 Block Markup(HTML 주석 형태 블록 선언)으로 되어있다. 이걸 JSON으로 감싸서 REST API로 보내면 교체된다.
문제 2: Navigation 메뉴가 안 보임
Site Editor에서 헤더에 메뉴 링크를 추가했는데 프론트에서 안 보인다.
WordPress Navigation 블록은 메뉴 데이터를 별도 navigation 포스트 타입으로 저장하고, 헤더의 Navigation 블록이 이걸 ref 속성으로 참조하는 구조다. ref가 안 맞으면 빈 메뉴가 뜬다.
REST API로 navigation 포스트에 메뉴를 채우고, 헤더 템플릿에서 ref를 연결해서 해결.
문제 3: 푸터 메뉴 중복
기본 테마 푸터에 Navigation 블록이 2개 있었다. Site Editor에서 하나를 삭제했지만 남아있었다.
# 푸터를 Paragraph 하나로 교체
curl -s -u "사용자:앱비밀번호" \
-X PUT "https://사이트/wp-json/wp/v2/template-parts/twentytwentyfive//footer" \
-H "Content-Type: application/json" \
-d '{"content":"© 2026 bokchi World"}'
문제 4: CSS 레이아웃 충돌
768px 최대 너비를 적용했는데 헤더/푸터 너비가 불일치.
테마의 --wp--style--root--padding-* CSS 변수와 .is-layout-constrained 클래스가 커스텀 CSS와 충돌했다. root padding 리셋, .wp-site-blocks에 통일 레이아웃 적용, constrained 이중 제약 해제로 해결.
블록 테마(Twenty Twenty-Five 등)를 커스터마이징할 때는 --wp--style-- 변수와 is-layout-constrained 클래스를 먼저 파악해야 한다. 이걸 모르면 CSS 충돌이 끝도 없이 난다.
결과
- LINE Seed KR + JetBrains Mono 코드 폰트
- 다크 네이비 본문 + 딥 블루 링크 + 흰 배경
- 768px 1컬럼 미니멀 레이아웃
- 헤더~푸터 일관 정렬
정리하면: Site Editor는 기본 편집에 편하지만 블록 중첩에서 한계가 있다. 안 되면 REST API로 우회하면 된다. Navigation 블록의 ref 구조, 블록 테마 CSS 변수를 이해해두면 삽질이 줄어든다.


