관리하는 워드프레스 사이트에서 특정 카테고리의 글을 제외하고 모든 글을 삭제하려는 경우가 있을 수 있습니다. 대량으로 글을 삭제할 때는 이 글에서 소개하는 Bulk Delete 플러그인을 사용할 수 있습니다. 하지만 글이 너무 많거나 멀티사이트 같은 이유로 플러그인을 사용할 수 없을 때는 데이터베이스(DB)에서 직접 글을 삭제할 수 있습니다.
워드프레스에서 특정 카테고리의 글을 제외한 모든 글 삭제하기
게시글을 대량으로 삭제하기 전에 사이트를 반드시 백업하세요. 백업하지 않으면 삭제 후 복구가 불가능할 수 있습니다.
phpMyAdmin 등의 데이터베이스에 접속하여 콘텐츠를 직접 삭제할 수 있습니다.
특정 카테고리에 속한 글을 제외하고 모든 포스트를 삭제하려면 다음 SQL 쿼리를 실행하세요.
DELETE wp_7_posts FROM wp_7_posts
LEFT JOIN wp_7_term_relationships ON wp_7_posts.ID = wp_7_term_relationships.object_id
AND wp_7_term_relationships.term_taxonomy_id = 10
WHERE wp_7_term_relationships.object_id IS NULL;
DELETE FROM wp_7_term_relationships WHERE object_id NOT IN (
SELECT ID FROM wp_7_posts
);
DELETE FROM wp_7_postmeta WHERE post_id NOT IN (
SELECT ID FROM wp_7_posts
);
위 방법을 사용하면 페이지도 모두 삭제될 수 있습니다. 다음과 같이 포스트 타입을 지정하면 페이지는 유지됩니다.
DELETE wp_7_posts FROM wp_7_posts
LEFT JOIN wp_7_term_relationships ON wp_7_posts.ID = wp_7_term_relationships.object_id
AND wp_7_term_relationships.term_taxonomy_id = 10
WHERE wp_7_term_relationships.object_id IS NULL
AND wp_7_posts.post_type = 'post';
DELETE FROM wp_7_term_relationships WHERE object_id NOT IN (
SELECT ID FROM wp_7_posts WHERE post_type = 'post'
);
DELETE FROM wp_7_postmeta WHERE post_id NOT IN (
SELECT ID FROM wp_7_posts WHERE post_type = 'post'
);
클라우드웨이즈(Cloudways)를 이용하면 Database Manager에 접속해 SQL 명령 섹션에서 위 쿼리를 실행할 수 있습니다.

카페24를 이용하면 phpMyAdmin에 접속하여 DB를 관리할 수 있습니다.
위 명령을 실행하면 특정 카테고리의 글을 제외한 모든 글이 삭제됩니다. 단, 카테고리에 속한 글 개수는 갱신되지 않습니다.

다음 SQL 쿼리를 실행하면 카테고리 글 개수가 동기화됩니다.
UPDATE wp_7_term_taxonomy tt
SET count = (
SELECT COUNT(tr.object_id)
FROM wp_7_term_relationships tr
WHERE tr.term_taxonomy_id = tt.term_taxonomy_id
)
WHERE tt.taxonomy = 'category';
페이지를 새로 고치면 카테고리 글 개수가 업데이트된 것을 확인할 수 있습니다.

모든 카테고리를 삭제할 수 있습니다. 위 그림에서 블로그 카테고리 글을 제외한 모든 카테고리가 삭제되었습니다.
카테고리 글 개수가 갱신되지 않으면, 클라우드웨이즈를 이용하는 경우 Breeze 캐시 플러그인의 캐시를 삭제한 후 확인하세요.

DB 작업은 실행한 후 되돌릴 수 없습니다. 반드시 DB를 백업한 후 위 방법을 시도하세요.
위 방법으로 글을 삭제한 후 에러가 발생하면 백업본을 사용해 복구하시기 바랍니다.