Technote

개발 워크플로우 입문

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

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

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

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

목록이 먼저입니다

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

이 주제의 다른 글

노하우 목록으로

개발 워크플로우 실무

워드프레스를 GitHub 에 올릴 때의 .gitignore

워드프레스 저장소에서 커밋해야 할 것과 절대 커밋하면 안 되는 것의 경계는 명확합니다. wp-config.php 한 파일이 저장소에 들어가는 순간 DB 비밀번호와 인증 솔트가 통째로 유출됩니다.

개발자 · 운영 · 관리자 5분 읽기

개발 워크플로우 실무

취향 논쟁을 규칙 확인으로 바꾸는 디자인 리뷰

"좀 답답해 보인다" 는 반박할 수 없고 고칠 수도 없습니다. 간격 척도 밖의 값, 팔레트 밖의 색, 기준 미달 대비, 빠진 상태 — 네 항목만 규칙으로 바꿔도 리뷰의…

디자이너 4분 읽기

₩270,000 · 신청하기