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 한 줄로 하고 싶어지는 일인데, 바로 거기서 설정값이 조용히 사라집니다 — 이유는 직렬화입니다.

이 주제의 다른 글

노하우 목록으로

개발 워크플로우 실무

캠페인 주소 관리 — 색인과 리포트가 함께 쪼개집니다

캠페인 파라미터가 붙은 주소는 검색엔진에게 별개의 주소입니다. 색인되면 같은 페이지가 여러 벌로 잡히고, 표기가 흔들리면 리포트가 쪼개집니다. 원인이 하나라 해법도 하나입니다.

마케터 5분 읽기

개발 워크플로우 심화

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

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

디자이너 3분 읽기

개발 워크플로우 심화

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

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

디자이너 5분 읽기

₩270,000 · 신청하기