Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. WordPress
Code

워드프레스 메타 데이터 완전 정복: 배열의 이해와 활용

by
Length:MediumLanguages:

Korean (한국어) translation by Dae-yeop Lee (you can also view the original English article)

이 연재 글의 1부에서는 워드프레스 메타 데이터란 무엇이고, 메타 데이터를 가져오는 법과 가져올 수 있는 다양한 자료형(객체나 배열 같은)에 관해 다뤘습니다. 이제 다양한 유형의 배열에 관해 배울 차례입니다.

배열을 직접 작성해 보면 배열의 구조가 각 인덱스의 이름으로 돼 있다는 사실을 알고 있을 겁니다. 그러나 데이터베이스를 질의해서 배열을 만들 경우에는 반환된 데이터의 구조와 인덱스의 이름을 파악하기 위한 작업을 해야 할 것입니다.

배열의 유형

사용 가능한 다양한 유형의 배열을 바로 알아보기에 앞서 PHP 배열이 하나 이상의 데이터를 담을 수 있는 변수라는 점을 이해하는 것이 중요합니다.

연관 배열 vs. 인덱스 배열

가장 간단한 배열 예제는 다음과 같이 콤마로 구분된 값의 리스트가 array() 내부에 들어 있는 형태입니다.

PHP는 자동으로 콤마로 구분되는 리스트에 생성된 배열에 인덱스를 부여하는데, 이때 각 항목에 0부터 시작하는 숫자 인덱스를 할당합니다. 따라서 인덱스를 1로 지정하면 $heroes 배열의 두 번째 항목인 'Leia'의 값을 가져올 수 있습니다.

다음 코드를 봅시다.

실제 워드프레스 예제로 wp_get_attachment_image_src() 함수를 살펴봅시다. 이 함수는 이미지에 관한 정보로 구성된 인덱스 배열을 반환합니다.

이 함수에서 반환하는 배열에 숫자 인덱스를 지정해 이미지의 URL과 너비 및 높이를 구할 수 있습니다(참고로 함수에 전달한 '7'은 첨부파일 ID를 의미하며, 이 예제에만 해당합니다).

물론 배열의 인덱스 번호를 계속 알고 있으려면 혼동될 수도 있는데, 이러한 이유로 PHP에서는 연관 배열(associative array)을 만들 수 있습니다. $heroes 예제로 돌아와서, 다음과 같이 배열의 각 항목에 이름을 부여할 수도 있습니다.

이러한 이름을 키(key)라고 합니다. 이 배열에서 'unlikely_hero'라는 키는 'Luke'라는 값을 가지고 있다고 할 수 있습니다. 변수 옆의 대괄호에 키를 지정하는 식으로 이 키의 값을 구할 수 있습니다. 다음 예제를 봅시다.

다차원 배열

지금까지는 본질적으로 항목의 리스트에 해당하는 배열만 살펴봤는데, 배열은 다른 여러 개의 배열로 구성될 수도 있습니다. 이를 다차원 배열(multi-dimensional array)이라고 합니다. 다차원 배열을 만들면 본질적으로 리스트의 리스트를 갖게 되는데, 여기서 배열의 각 인덱스나 키는 또 다른 배열로 정의됩니다.

다음 예제를 봅시다.

이러한 배열은 순회할 수 있어서 아주 유용한데, 마크업을 한번 작성한 다음 PHP가 해당 마크업을 원하는 만큼 순회하게 할 수 있습니다.

탐지 작업용 도구

이 글의 초반부에서 이야기한 것처럼 메타 데이터를 이용할 때 배열의 구조를 파악하는 탐지 작업이 필요할 때가 있습니다. 여느 탐지 작업과 마찬가지로 작업에 맞는 도구를 갖춰야 합니다.

아마추어 개발자들은 배열의 값을 임시로 출력하기 위해 테마 파일을 변경합니다. 하지만 작업을 빠르고 효율적으로 하고 싶다면 전문가의 방식(디버그 콘솔)을 이용하면 됩니다.

디버그 콘솔이란?

디버그 콘솔(Debug Console)은 모든 워드프레스 개발자가 갖춰야 할 디버그 바(Debug Bar) 플러그인에 설치하는 여러 애드온 중 하나입니다. 개발 환경에 디버그 바가 아직 설치돼 있지 않다면 가능한 한 빨리 디버그 바를 설치할 필요가 있습니다.

이 두 플러그인을 설치하고 나면 관리자 화면에서 콘솔에 접근할 수 있는데, 이곳에서 PHP 코드를 실행할 수 있습니다. 이제 테마 파일을 변경하는 대신 코드를 저장하고 새로고침하는 식으로 브라우저 상에서 코드를 곧바로 실험해 볼 수 있습니다.

'run'을 클릭하고 나서 화면 하단에서 결과를 확인하기만 하면 됩니다. 가장 멋진 부분은 오류가 발생하더라도 사이트의 프런트엔드가 아니라 결과 박스에 오류가 나타난다는 점입니다. 치명적인 오류가 발생해도 사이트가 아닌 디버그 콘솔이 망가집니다.

지금까지 디버그 바가 제공하는 기능을 대략적으로 알아봤습니다. 아울러 디버그 바와 디버그 콘솔은 다른 여러 멋진 유틸리티와 함께 제가 적극 추천하는 개발자 플러그인(Developer Plugin)에 포함돼 있습니다. 지금은 메타 데이터를 이용하는 법을 배우고 있기 때문에 디버그 바 포스트 메타(Debug Bar Post Meta) 플러그인도 상당히 유용할 것입니다.

var_dump vs. print_r

이제 배열의 내부를 어떻게 탐험할지 테스트할 곳이 생겼습니다. 이 작업을 위해 PHP에서는 프런트엔드 출력에 절대 사용하지는 않겠지만 진단 작업에는 안성맞춤인 두 개의 유틸리티 함수, 즉 var_dump()print_r()을 제공합니다.

이 두 함수 모두 배열을 입력으로 받아 해당 배열의 내용물을 검사할 수 있게 출력합니다. var_dump()는 데이터 타입(문자열, 불리언, 정수 등)과 데이터의 길이 같은 정보를 더 담고 있는 반면 print_r()은 가독성이 높고 추가 정보를 건너뛰게끔 만들어져 있습니다.

var_dump를 이용해 인덱스나 키 찾기

var-dump

위 그림은 포스트의 메타 데이터를 var_dump로 출력한 결과입니다. 여기서 한 필드의 상세 정보를 출력하는 방법을 볼 수 있습니다. 제 목표는 WordPress SEO by Yoast 플러그인에서 생성한 메타 제목 필드의 값을 구하는 것이었습니다.

var_dump의 출력 결과(get_post_meta( 1 );을 통해 ID가 1인 포스트의 모든 메타 필드로부터 생성된)에서 볼 수 있듯이 연관 및 다차원 배열을 사용하고 있으며, 여기엔 단 하나의 인덱스만 있는 인덱스 기반 배열이 담겨 있습니다. var_dump를 조사해서 제가 원했던 키가 '_yoast_wpseo_title'였고 필요한 실제 정보는 첫 번째 인덱스에 들어 있었다는 사실을 알아냈습니다. 해당 정보에 접근하기 위해 '_yoast_wpseo_title' 키를 변수에 지정했더니 첫 번째 인덱스의 내용이 다음과 같이 출력됐습니다.

이것은 필요한 키를 찾는 전략을 보여주는 좋은 예지만 키를 알고 나면 해당 정보를 구하는 가장 효율적인 방법은 아닙니다. 올바른 키를 찾기 위한 탐지 작업을 하고 나면 get_post_meta()를 호출할 때 곧바로 키를 지정하면 됩니다. 즉, 키가 필요할 경우 해당 키를 get_post_meta()의 두 번째 인자로 곧바로 지정하면 됩니다.

get_post_meta(1, '_yoast_wpseo_title' );를 호출하더라도 필요한 값이 아닌 배열이 반환된다는 점을 염두에 두는 것이 좋습니다. 세 번째 인자인 'single'에 true를 지정하는 식으로 우리가 원하는 첫 번째 인덱스를 구할 수 있습니다.

그럼 SEO 제목을 바로 구하려면 다음과 같은 딱 한 줄만 있으면 됩니다.

get_user_meta() 이용하기

이 글에서는 지금까지 wp_postmeta 테이블을 활용하는 방법을 보여드렸고, 이 테이블에는 포스트 타입에 추가된 모든 커스텀 필드가 담겨 있습니다.

사용자도 커스텀 필드를 가질 수 있습니다. 사용자 메타 데이터 및 사용자 프로필에 추가된 추가 필드는 포스트 메타 데이터와 거의 같은 식으로 동작하지만 wp_usermeta 테이블에 저장됩니다. 사용자 메타 데이터를 이용할 때는 get_post_meta() 대신 get_user_meta()를 사용하면 됩니다.

이 두 함수는 동일하게 동작하지만 단순히 데이터베이스에서 두 개의 서로 다른 테이블에서 데이터를 가져오기만 할 뿐입니다.

다음은 get_user_meta()를 이용해 커스텀 이미지를 작성자의 포스트 링크로 출력하는 예제입니다.

다음 글에서는...

이 연재 글의 2부에서는 다양한 유형의 메타 데이터를 비롯해 그러한 메타 데이터가 어떻게 저장되고 조회할 수 있는지 살펴봤습니다. 아울러 PHP에서 제공하는 두 가지 유형의 배열을 알아보고, 이를 포스트 및 사용자와 연관된 메타 데이터에 어떻게 활용할 수 있는지 알아봤습니다.

이 연재 글의 3부에서는 각 유형의 데이터를 순회하는 방법을 통해 템플릿의 출력 결과를 얼마나 강력하고 유연하게 커스터마이즈할 수 있는지 살펴보겠습니다.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.