Technote

개발 워크플로우 입문

연재 WP-CLI 자동화 레시피 8부 중 2부

글과 텀을 명령으로 다루기 — 목록이 먼저입니다

일괄 수정 사고는 대부분 대상을 잘못 고른 데서 납니다. 선택과 실행을 두 명령으로 나누면, 무엇이 바뀔지 눈으로 먼저 확인할 수 있습니다.

글 300건의 카테고리를 옮기거나, 특정 조건의 초안을 한꺼번에 발행하거나, 태그 하나를 통째로 정리하는 일은 관리 화면에서 하면 반나절이 걸립니다. 명령으로는 두 줄입니다. 그 두 줄이 왜 두 줄이어야 하는지가 이 회차의 핵심입니다.

목록이 먼저입니다

wp post list 는 WP_Query 의 인자를 거의 그대로 플래그로 받습니다. 즉 관리 화면 목록에서 걸 수 있는 필터는 대부분 여기서도 걸립니다.

wp post list --post_type=post --post_status=draft --fields=ID,post_title,post_name
wp post list --post_type=post --category_name=seo --format=csv
wp post list --post_type=post --posts_per_page=-1 --format=ids

--fields 로 필요한 열만 뽑고, --format 으로 표 · CSV · JSON · ID 목록 중 하나를 고릅니다. 이 중 --format=ids 가 다음 단계의 재료입니다.

규칙은 하나입니다. 대상을 고르는 명령과 그 대상을 바꾸는 명령을 분리하고, 고르는 명령을 먼저 단독으로 실행합니다. 화면에 나온 목록이 의도한 목록과 같은지 눈으로 확인한 뒤에만 두 번째 명령을 붙입니다.

생성 — –porcelain 이 파이프를 만든다

글을 만들 때 --porcelain 을 붙이면 사람이 읽는 성공 메시지 대신 새 글의 ID 하나만 출력합니다. 그래서 다음 명령의 인자로 그대로 넘어갑니다.

ID=$(wp post create --post_type=page --post_title='요금' --post_name=pricing --post_status=draft --porcelain)
wp post meta update $ID _wper_layout wide
wp post term set $ID category performance

본문이 긴 경우에는 플래그에 밀어 넣지 않고 파일에서 읽습니다 — wp post create ./body.html --post_title='요금' 형태로 첫 위치 인자에 파일 경로를 주면 그 파일이 본문이 됩니다. 셸 따옴표 지옥을 피하는 가장 쉬운 방법입니다.

분류와 메타

텀도 같은 방식입니다. 먼저 무엇이 있는지 보고, 그다음에 붙입니다.

wp term list category --fields=term_id,slug,name,count
wp term create wper_role developer --slug=developer
wp post term add 123 wper_level practical
wp post meta list 123

term set 과 term add 는 다릅니다. set 은 기존 텀을 전부 교체하고 add 는 더합니다. 카테고리처럼 “글 하나에 하나” 규칙이 있는 분류에는 set, 태그처럼 누적되는 분류에는 add 를 씁니다. 이 둘을 바꿔 쓰면 조용히 분류가 뭉개집니다.

메타에 배열이나 객체를 넣어야 한다면 --format=json 을 씁니다. 직렬화 문자열을 손으로 만들어 넣지 마세요 — 다음 회차의 주제가 바로 그 직렬화가 깨지는 이야기입니다.

일괄 수정에서 다치지 않는 법

선택이 확인됐으면 실행은 짧습니다. 목록 명령을 그대로 안쪽에 넣습니다.

wp post update $(wp post list --post_type=post --post_status=draft --category_name=seo --format=ids) --post_status=publish

여기서 지켜야 할 것들이 있습니다.

일괄 수정 전 점검 — 위 네 줄이면 되돌릴 수 없는 사고는 거의 없다

wp post delete 는 기본이 휴지통 이동이고, --force 를 붙이면 영구 삭제입니다. 영구 삭제는 되돌릴 수 없습니다. 대량 삭제 앞에서는 습관적으로 wp db export 를 한 번 돌리는 편이 낫습니다 — 몇 초면 끝나고, 필요할 때 없으면 대체할 방법이 없습니다.

콘텐츠 구조를 어떻게 설계하면 이런 작업이 쉬워지는지는 개발 워크플로우 아카이브에서 다루고, 이미 쌓인 사이트의 구조 정리와 업그레이드를 한 건으로 맡기고 싶다면 최적화 지원 사업을 참고하세요.

다음 회차

다음 회차는 도메인을 바꾸는 작업입니다. SQL 한 줄로 하고 싶어지는 일인데, 바로 거기서 설정값이 조용히 사라집니다 — 이유는 직렬화입니다.

이 주제의 다른 글

노하우 목록으로

개발 워크플로우 심화

배포 전 디자인 QA 체크리스트

배포 후에 발견하는 디자인 문제의 대부분은 배포 전에 순서대로 확인하면 잡힙니다. 규칙 · 상태 · 실기기의 세 단계로 정리했습니다.

디자이너 3분 읽기

개발 워크플로우 심화

되돌릴 계획 없이 배포하지 않습니다

롤백은 버튼 하나가 아니라 코드와 데이터베이스 두 갈래이고, 되돌리는 순서가 있습니다. 그 순서를 배포 전에 적어 두는 것까지가 준비입니다.

디자이너 5분 읽기

₩270,000 · 신청하기