Skip to content

유저씨

워드프레스, 무료 워드프레스 사이트 예제, 인터넷 정보

유저씨
Search for:

Attachment 타입을 위한 워드프레스 커스텀 분류 등록

연재고품격 고품질 워드프레스 무료 사진 저장소완결2
2018.01.012023.02.09 by Jinn

워드프레스 입문자가 반드시 확인 또는 이해해야 하는 핵심 요소 중의 하나는 ‘워드프레스의 분류’입니다. ‘WordPress Taxonomy’ 또는 ‘WordPress Taxonomies’처럼 영어(로마자) 표기도 기억하는 것이 좋습니다. 알아둘 것은 워드프레스의 모든 요소처럼 ‘기본’은 기본이며 모든 것이 아니다는 것인데, 대표적으로 ‘카테고리(Category, Categories)’, ‘태그(Tag, Tags)’를 꼽을 수 있습니다. 간략하게 짚고 과정을 이어갑니다.

워드프레스의 기본 분류 category, post_tag

카테고리의 워드프레스 시스템(프로그램적) 명칭은 ‘category’, 태그는 ‘post_tag’이며, 이 2가지에 관하여 다음의 기준을 한 번만이라도 읽어두면 도움이 됩니다.

  • 워드프레스의 기본 분류(taxonomy)에 불과한 것
  • 기본으로 타입 post에 사용할 수 있도록 정의되어 있음
  • 카테고리와 태그의 차이는 계층hierarchy 구조인가 아닌가의 속성 차이에 불과함
  • 따라서 2개의 기본 분류로 워드프레스 분류 속성의 차이를 역시 기본으로 제공한 것
  • 카테고리와 태그를 영어 뜻으로 해석하는 것은 틀린 것
  • 카테고리와 태그는 모두 ‘분류’라는 뜻으로 이름만 다른 것
  • 기본 포스트 타입 page에는 카테고리와 태그를 사용하지 않는다는 것은 틀린 것
  • 따라서 포스트 타입 post에만 카테고리와 태그를 사용할 수 있다는 것도 틀린 것
  • 어떤 포스트 타입에 사용할 것인가와 사용하지 않는 것은 사용자의 의도에 달린 것
  • 어떤 포스트 타입에 사용한다는 것은 ‘그 포스트 타입의 개별 포스트를 사용하는 분류(카테고리, 태그)로 분류(taxonomy, 구분)한다는 뜻
  • 커스텀 포스트 타입, 포스트 포맷, 워드프레스 메뉴도 결국, 포스트를 특정 이름의 ‘분류’로 ‘분류’한 것

이 정도의 내용만 이해한다면 워드프레스 분류에 관한 것은 충분합니다. 물론 나중에 나올 커스텀 분류도 있지만, 이 역시 필요에 따라 사용자가 추가하는 이름만 다른 ‘분류’에 불과하다는 것은 위의 내용만 이해하면 이의가 있을 수 없습니다.

워드프레스 기본 분류를 attachment 타입에 사용하기

기본 분류인 카테고리와 태그는 기본으로 타입 post에 사용할 수 있도록 정의되어 있지만, 다른 포스트 타입에도 당연히 사용할 수 있습니다. 다만, attachment 타입에 사용할 때는 기본 포스트 타입 post, page, 커스텀 포스트 타입과는 약간 다른 정의가 필요합니다. 실제 예제에서는 기본 분류를 타입 attachment에 사용하지 않지만, 간략하게 먼저 알아보고 커스텀 분류를 생성하여 적용해봅니다.

먼저, 관리페이지 미디어 라이브러리 목록에서 제목 ‘달나라 여행’ 이미지를 클릭하여 미디어 편집 화면에 접근합니다. ‘저장하기’ 메타박스 외 카테고리나 태그 메타박스는 나오지 않을 것입니다.

이제 테마 루트 inc/image-functions.php 파일을 열어 맨 아래에 다음 코드를 추가하고 저장합니다. 그리고 관리페이지의 제목 ‘달나라 여행’ 이미지 편집 화면을 다시 확인합니다.

add_action( 'init' , 'add_default_tax_to_attachments' );
function add_default_tax_to_attachments() {
    register_taxonomy_for_object_type( 'category', 'attachment' );
    register_taxonomy_for_object_type( 'post_tag', 'attachment' );
}

미디어 편집 화면에 다음 그림처럼 카테고리와 태그 메타박스가 나오는 것을 볼 수 있습니다. 앞의 코드는 지금 이 결과를 위한 참고 코드 스니핏 정도로 이해하면 됩니다.

워드프레스 기본 분류를 적용한 미디어 편집 화면

타입 attachment의 분류 term 카운팅

소제목 ‘타입 attachment의 분류 term 카운팅’이라는 말에서 ‘term’은 간략하게 ‘특정 분류의 하위 또는 구체적 구분’을 말합니다. 예제에서 사용할 커스텀 분류의 하나인 ‘카메라(cameracat)’를 예로 들면, 카메라 분류에 ‘소니’, ‘삼성’, ‘캐논’ 등의 하위 구분을 추가 정의할 때 ‘소니’, ‘삼성’, ‘캐논’은 카메라 분류의 ‘term’이 됩니다. 예제에서는 번역하지 않은 ‘term’ 표기를 그대로 사용합니다. 또, term의 정의가 워드프레스에서 다르게 사용되는 경우가 있어도 예제에서는 이처럼 단순하게 정의합니다.

특정 포스트를 등록, 편집, 삭제할 때 카메라 분류의 특정 term 하나를 선택 또는 추가한 후 포스트를 저장하면, 워드프레스는 그 term에 속한 포스트의 개수를 데이터베이스 ‘_term_taxonomy’ 테이블의 ‘count’ 필드에 저장합니다. 혹시 자신의 워드프레스 블로그나 웹사이트가 있다면 관리페이지의 카테고리 목록 화면에 한글 버전 기준 ‘카운트’ 열을 확인해보세요.

그러나 attachment 타입의 포스트는 기본으로 카운팅(개수 업데이트)하지 않습니다. 워드프레스 시스템적 이유를 알 필요는 없습니다. 따라서 코드를 추가하여 attachment 타입, 예제에서 이미지를 등록할 때 term에 속하는 포스트(이미지) 개수를 업데이트(데이터베이스에 저장)해야 합니다.

직접 확인하여 이해를 더합니다. 다음 순서로 진행하세요.

  • 관리페이지 ‘달나라 여행’ 이미지 편집 화면에서 카테고리 ‘미분류’ term 선택 후 ‘업데이트’ 버튼을 클릭합니다.
  • 관리페이지 미디어 메뉴 하위의 ‘카테고리’ 메뉴를 클릭합니다.
  • ‘카운트’ 열을 확인하여 ‘0’이 나오는지 확인합니다.

카테고리 term ‘미분류’를 선택하고 포스트를 업데이트했지만, 미분류 term의 포스트 개수는 변화가 없음을 알 수 있습니다. 다음 코드를 테마 루트 inc/image-functions.php 파일 맨 아래에 이어서 추가하고 저장합니다.

add_action( 'init', 'add_attachment_tax_count' );
function add_attachment_tax_count() {
    global $wp_taxonomies;
    $wp_taxonomies['category']->update_count_callback = '_update_generic_term_count';
    $wp_taxonomies['post_tag']->update_count_callback = '_update_generic_term_count';
}

이어서 다음 순서로 따라 합니다.

  • 제목 ‘달나라 여행’ 이미지 포스트 편집 화면에 접근하여 ‘업데이트’ 버튼을 클릭합니다.
  • 관리페이지 미디어 메뉴 하위의 ‘카테고리’ 메뉴를 클릭합니다.
  • ‘카운트’ 열의 값 ‘0’을 확인합니다.
  • 이번에는 제목이 ‘세로가 긴 이미지’ 이미지 포스트 편집 화면에 접근합니다.
  • 카테고리 메타박스의 ‘미분류’ term을 선택하고 업데이트 버튼을 클릭합니다.
  • 다시 관리페이지 미디어 메뉴 하위의 카테고리 메뉴를 클릭합니다.
  • 카운트 열의 값이 ‘2’가 나오는지 확인합니다.

앞의 일련의 과정은 다음의 내용을 확인하기 위한 것입니다.

  • attachment 타입의 포스트는 기본으로 term 포스트 카운팅이 되지 않음
  • 코드를 추가하여 카운팅이 가능하도록 정의
  • 코드 추가 후 코드 추가 전 term을 추가한 포스트는 업데이트해도 term 카운팅에서 제외
  • 코드를 추가한 후 새로운 포스트 업데이트(또는 등록)로 term 카운트 전체 업데이트

지금의 예제처럼 이미지와 같은 attachment 포스트 타입의 콘텐츠에 워드프레스 기본 분류 또는 커스텀 분류를 사용할 때 term 카운팅에 관하여 참고하는 것으로 정리합니다. 타입 attachment 포스트의 term 카운팅 관련 내용은 다음의 코덱스 링크 update_count_callback 항목에서 조금 더 자세한 정보를 얻을 수 있습니다.

Register taxonomy: Arguments

앞에서 테마 루트 inc/image-functions.php 파일에 추가한 2가지 코드를 모두 삭제하는데, 이어서 안내하는 커스텀 분류 등록과 적용에서 실제 코드를 추가할 것입니다. 이때 2가지 코드를 삭제하면 미디어 편집 화면의 분류 메타박스는 나오지 않지만, 데이터베이스에 개수 데이터는 그대로 남아 있습니다. 이 데이터는 이미지를 삭제하여 지웁니다.

  • 테마 루트 inc/image-functions.php 파일에 추가한 2가지 코드를 지웁니다.
  • 관리페이지 미디어 라이브러리 목록에서 3개의 이미지를 모두 삭제합니다.

커스텀 분류 등록

기본 분류로 카테고리(category), 태그(post_tag) 등이 있음은 이미 알고 있습니다. 기본에 없는 새로운 분류를 정의하면 그것이 ‘커스텀 분류’이므로 긴 설명은 필요가 없을 것입니다. 예제에서는 4개의 커스텀 분류를 등록할 것이며 다음과 같습니다.

  • mediacat: 미디어 분류 – 그래픽, 사진, 일러스트의 3개 고정, 계층 구조
  • photocat: 2차 분류 – 감정, 건강, 건축 등 20개 고정, 계층 구조
  • phototag: 미디어 태그 – 제한이 없으며, 원본 이미지에서 읽거나 추가
  • cameracat: 카메라 종류 – 원본 이미지에서 읽어 워드프레스 term으로 저장

분류 중 ‘mediacat’, ‘photocat’의 term은 사이트 운영자가 미리 정하여 둔다는 기준으로 예제에 적용하는 것인데, 나중에 제공할 원본 이미지의 EXIF 데이터에 관련 term을 저장하여 제공합니다. 이 원본 이미지를 업로드하면 자동으로 해당 분류의 term이 생성되고 이미지 포스트에 연결되도록 다음 장에서 처리할 것입니다.

‘phototag’, ‘cameracat’은 원본 이미지 EXIF 데이터에 있으면 업로드할 때 자동으로 해당 분류의 term으로 등록되고 이미지 포스트에 연결되도록 역시 다음 장에서 정의합니다. 단, 관리자를 제외하고 ‘cameracat’은 미디어 편집 화면에서 추가나 편집을 허용하지 않도록 나중의 해당 과정에서 정의합니다.

커스텀 분류의 등록은 완성 파일과 임시 이미지를 제공한 후 추가 내용을 간략하게 전달합니다. 커스텀 분류와 커스텀 포스트 타입 등록에 관한 내용은 나중에 코덱스에서 자신만의 주제를 가지고 하나씩 직접 설정하면서 확인하여 이해하는 것이 가장 좋습니다. 다음 링크의 파일을 받아 적당한 곳에 압축을 풉니다.

14장의 테마 파일과 임시 이미지

제공한 압축 파일을 풀면 다음의 이미지와 파일이 있습니다.

14장/
├── 사진
│   ├── background-2608593.jpg
│   ├── castle-2596885.jpg
│   ├── havana-2256329.jpg
│   ├── mexico-88768.jpg
│   └── plants-2626099.jpg
└── 테마
    └── wp-content
        └── mu-plugins
            └── pics-tax-cpt.php

먼저, 테마 폴더의 ‘wp-content’ 폴더를 사이트 루트에 그대로 덮어씁니다. 다음으로 관리페이지 미디어 메뉴의 ‘파일 올리기’ 메뉴를 클릭하여 사진 폴더의 5개 이미지를 모두 업로드합니다.

EXIF 메타데이터가 있는 이미지

제목 ‘멕시코에서’ 이미지 포스트의 편집 화면에 접근하면 다음 그림처럼 4개의 분류에 해당하는 메타박스를 볼 수 있으며, 왼쪽의 관리페이지 미디어 메뉴 하위에 역시 4개의 커스텀 분류에 해당하는 메뉴를 볼 수 있습니다.

커스텀 분류 등록 후 이미지 포스트 편집 화면

사이트에서 연습장 페이지를 새로 고쳐 결과를 확인하면, 지난번과 다른 데이터를 볼 수 있는데, ‘image_meta’ 배열의 ‘caption’ 데이터에 ‘사진, 취미’, ‘사진, 음악’, ‘그래픽, 건축’, ‘일러스트, 배경’, ‘사진, 식물’처럼 기호로 구분한 텍스트 데이터가 저장된 것을 볼 수 있습니다.

앞에서 잠깐 말했는데, 이 구분한 텍스트 데이터를 순서대로 ‘mediacat’, ‘photocat’ 분류의 term으로 이미지를 올릴 때 자동으로 등록되도록 다음 장에서 진행합니다. 또, ‘camera’ 데이터는 ‘cameracat’ 분류의 term으로, ‘keywords’ 데이터는 ‘phototag’ 분류의 term으로 등록되도록 작업합니다.

이 정도의 내용만 미리 인지하면 되고, 이제 편집기로 사이트 루트의 wp-content/mu-plugins/pics-tax-cpt.php 파일을 엽니다.

커스텀 분류 등록 코드의 전체 패턴은 다음과 같고, ‘mediacat’ 하나만 가져온 것입니다.

add_action( 'init', 'register_attachment_taxonomies_with_cpt', 0 );
function register_attachment_taxonomies_with_cpt() {
    // mediacat
    register_taxonomy( 'mediacat', array( 'attachment' ), array(
        'labels' => array(
            'name' => '미디어분류',
            'label' => '미디어분류',
            'menu_name' => '미디어분류',
        ),
        //'capabilities' => $capabilities,
        'hierarchical' => true, // Default: false
        'show_admin_column' => true, // Default: false
        'update_count_callback' => '_update_generic_term_count', // 첨부되지 않은 attachment 타입, 'inherit' post status
        'show_in_rest' => true,
    ) );
}

커스텀 포스트 타입, 커스텀 분류 등록은 워드프레스에서 상대적으로 먼저 로드되어야 한다는 흐름의 기준에서 MUP(Must Use Plugins) 유형으로 등록했고 지금 그 파일을 열었습니다. 또, 1번 줄의 init 훅을 사용하는 것이 일반적이며, 1번 줄의 ‘0’처럼 ‘로드 우선순위’ 또는 ‘로드 정렬 우선순위’를 빠르게(먼저 로드) 정의하는 것 역시 일반적입니다. 시스템이나 프로그램적으로 이해하려면 연결된 많은 내용이 있어 때로 이해하는 데 오히려 비효율적이며, 지금의 예제와 보통의 워드프레스 웹사이트 구축에는 알지 못해도 전혀 상관이 없습니다. 커스텀 포스트 타입과 분류만큼은 보편적인 방식을 따르기 바랍니다.

4번 줄의 register_taxonomy 함수가 워드프레스의 분류 등록 함수입니다. ‘mediacat’ 프로그램 명칭으로 ‘attachment’ 포스트 타입에 사용한다는 뜻입니다.

5번 줄에서 9번 줄의 ‘label’에서 등록한 내용 중에는 사이트(프런트)에서 사용하는 때가 있지만, 대부분 관리페이지를 위한 설정입니다. 6, 7, 8줄의 기본만 정의하면 충분한데, 여러 사용자가 콘텐츠를 등록하는 워드프레스 사이트라면 세부 명칭을 모두 지정하는 것이 좋습니다. 예제도 다수의 등록자가 이미지를 등록한다는 가정을 뒀지만, 코드가 길어져 혹시 괜히 복잡하다고 생각할 사용자를 위해 생략하였습니다. 나중의 과정에서 완성 파일로 추가 제공합니다.

11번 줄의 ‘hierarchical’, 이 설정이 기본 분류 카테고리처럼 계층 구조로 사용할 것인가에 관한 것입니다. ‘false’는 기본 분류 태그처럼 수평 구조로 사용한다는 뜻입니다.

13번 줄은 앞에서 다룬 attachment 포스트 타입과 term 카운트에 관한 설정입니다. 간략한 설명을 남겼는데, 워드프레스 분류를 타입 post와 같은 보통의 타입에 사용한다면 _update_post_term_count 함수를 사용하면 됩니다. 타입 attachment의 콘텐츠(포스트)를 ‘첨부’ 유형으로 사용할 때도 마찬가지입니다. 그러나, 예제와 같이 attachment 타입의 포스트를 독립적인 포스트로 사용하면서 분류를 사용할 때 코드에서 설정한 함수를 지정하면 됩니다. 이런 정도의 간단한 내용만 기억하세요.

14번 줄은 WP REST API 관련 설정입니다. 따로 지정하지 않으면 기본 ‘false’의 값으로 설정되는데, 나중에 관련 내용을 다시 확인하도록 합니다. 10번 줄은 워드프레스 권한에 관련한 것으로 역시 나중에 다시 확인합니다.

Flush the rewrite rules

마지막으로 위의 코드가 아니라 제공한 pics-tax-cpt.php 파일의 63번 줄을 보면 다음 코드를 볼 수 있습니다.

// pics-tax-cpt.php 파일의 63번 줄
'rewrite' => array( 'slug' => 'camera' ),

카메라 분류의 프로그램적인 이름은 ‘cameracat’인데, 위의 코드로 URL에 ‘camera’로 표시 또는 입력하도록 설정한 것입니다. 이때 이 설정을 적용하기 위해서는 데이터베이스의 데이터를 업데이트해야 합니다.

워드프레스의 URL 규칙, Rewrite Rules 데이터는 데이터베이스 ‘_options’ 테이블 ‘rewrite_rules’ 필드에 저장되므로 설정 변경 시 업데이트는 필수입니다. 가장 효율적이며 확실한 방법은 관리페이지의 고유주소 설정 페이지에서 ‘업데이트’1 버튼을 클릭하여 데이터를 갱신하는 것입니다. 코드를 통해 수동으로 갱신하는 방법이 있지만, 가장 확실한 방법을 사용할 것을 권장합니다.

지금의 커스텀 분류만이 아니라 커스텀 포스트 타입을 등록할 때도 마찬가지이며, 앞의 코드처럼 URL을 재등록하지 않았더라도 커스텀 포스트 타입과 분류를 등록, 수정했다면 ‘업데이트’ 버튼을 클릭하여 데이터를 갱신하기 바랍니다.

커스텀 분류 등록에 관한 내용을 마치고, 다음 장에서는 이미지의 메타 데이터 중 일부를 자동으로 이미지 포스트의 분류, 메타 데이터, 포스트 데이터로 자동으로 등록하는 방법을 알아봅니다.

이 글 공유하기:

  • 페이스북에 공유하려면 클릭하세요. (새 창에서 열림) Facebook
  • 클릭하여 X에서 공유 (새 창에서 열림) X
  • Pinterest에서 공유하려면 클릭하세요 (새 창에서 열림) Pinterest
  • 포켓에 공유하려면 클릭하세요 (새 창에서 열림) 포켓

예제 목차

0. 고품격 고품질 워드프레스 무료 사진 저장소

1. 예제 구성 환경과 파일

2. XAMPP, 워드프레스, 테마, 플러그인 설치와 설정

3. 테마 Pics Press

4. page 포스트 타입과 페이지 템플릿, 메뉴 구성

5. 워드프레스 핵심 용어 짚기

6. 워드프레스 포스트 타입 attachment

7. 워드프레스 이미지 사이즈

8. 워드프레스 이미지 사이즈 추가 및 변경

9. 워드프레스 이미지 파일 제어

10. 타입 attachment 템플릿과 image.php

11. 워드프레스 이미지 메타 데이터

12. GPS 데이터를 워드프레스 메타 데이터로 저장

13. 이미지 메타 데이터를 포스트 메타 데이터에 추가

» Attachment 타입을 위한 워드프레스 커스텀 분류 등록

15. 이미지 메타 데이터를 워드프레스 분류와 필드 데이터에 저장

16. 이미지를 편집할 때 포스트 데이터와 메타 데이터 업데이트

17. 워드프레스 미디어 파일 업로드

18. 워드프레스 싱글 이미지 포스트 페이지

19. 워드프레스 아바타와 Author Archives

20. 워드프레스 이미지 사이즈별 데이터 출력

21. 워드프레스 폼 요소로 원하는 이미지 사이즈 다운로드

22. 워드프레스 텍스트 단락 및 줄 바꿈, wpautop

23. 워드프레스 사진의 EXIF 데이터 출력

24. 구글 지도에 표시하는 사진 촬영 위치

25. 워드프레스 attachment 포스트 타입의 아카이브

26. 워드프레스 함수로 자바스크립트 변수 데이터 생성

27. 워드프레스 커스텀 검색 – 쿼리 변수

28. 워드프레스 커스텀 검색 – 검색 폼과 쿼리 데이터

29. 워드프레스 커스텀 포스트 타입 ‘pic_album’

30. 커스텀 포스트 타입의 싱글 페이지

31. 워드프레스 WP_Query

32. 커스텀 쿼리, 페이지 템플릿, 포스트 아카이브

33. 분류 기준의 관련 포스트 커스텀 쿼리

34. wpdb 클래스로 구글 지도에 마커와 섬네일 표시

35. 워드프레스 분류 데이터 쿼리 클래스, WP_Term_Query

36. 워드프레스 템플릿 태그

37. 워드프레스 옵션 페이지, 옵션 필드

38. 워드프레스 사이트 프런트 페이지

39. 사이트 메뉴 및 포스트 페이지 링크

40. 워드프레스 Transient API

41. 워드프레스 분류의 term 데이터를 캐시 데이터로 생성

42. 워드프레스 역할 그룹과 권한으로 구성 요소 제어

43. 간단한 워드프레스 코멘트 폼 수정

44. 워드프레스 대시보드 위젯 추가

45. 워드프레스 REST API 간략 이해

46. 워드프레스 REST API 응답에 커스텀 필드 추가

47. 워드프레스 REST API 커스텀 라우트 및 엔드포인트

48. 워드프레스 REST API 커스텀 엔드포인트로 구글 클러스터 지도 마커와 인포 윈도 표시

49. 워드프레스 REST API, Underscore.js 자바스크립트 템플릿, 포스트 Ajax Load More

50. 워드프레스 REST API, Underscore.js 자바스크립트 템플릿, 코멘트 Ajax Load More

51. 워드프레스 REST API 인증과 제한 및 제어

Posted in 워드프레스Tagged function register_taxonomy, post_tag, 워드프레스 attachment 타입의 분류 term 카운팅, 워드프레스 기본 분류를 attachment 타입에 사용하기, 워드프레스 커스텀 분류, 워드프레스의 기본 분류 category
  • 워드프레스 역할 그룹과 권한으로 구성 요소 제어

    워드프레스 역할 그룹과 권한으로 구성 요소 제어
  • 테마 Pics Press

    테마 Pics Press
  • 워드프레스 메일, phpmailer_init, Works Mobile, sSMTP

    워드프레스 메일, phpmailer_init, Works Mobile, sSMTP
  • 워드프레스 제트팩(Jetpack) 포스트 공유의 이메일 서비스 구글…

    워드프레스 제트팩(Jetpack) 포스트 공유의 이메일 서비스 구글 리캡챠(reCAPTCHA) 사용
  • 워드프레스 포스트 저장 후 특정 페이지로 이동

    워드프레스 포스트 저장 후 특정 페이지로 이동
©2025 유저씨