[워드프레스] get_posts 에서 사용자 정의 필드로 정렬하는 방법

#워드프레스 테마나 플러그인을 개발 할 때, #get_posts 함수를 이용해 원하는 포스트 목록을 불러와 출력하면 꽤나 간편합니다. 오늘은 이 get_posts 함수에서 사용자 정의 필드, 즉, Custom field 를 이용해 목록을 정렬하는 방법을 정리해봅니다.

현재 상황

현재 제가 처한 상황은 이런 것입니다.

일단 #워드프레스 로 특정 사건에 대한 기록을 하고 있는데, 포스트의 작성일자와 다르게 해당 사건이 발생한 날짜가 있어 이 정보를 기록하기 위해 포스트에 #사용자정의필드 를 temp_date 라는 이름으로 만들어 저장해 두었습니다.

이와 같이 여러가지 사건에 대해 각 포스트로 기록을 남기고 #get_posts 함수를 이용해 포스트 목록을 불러오는데 사건이 발생한 날짜 순서(오름차순)대로 정렬해 출력하고 싶어졌습니다. 기본적인 정렬 방법은 포스트의 발행일자 역순이기 때문에 원하는대로 출력이 안되어 이를 해결해야 합니다.

get_posts 투입변수

#get_posts 함수를 이용해 포스트 목록을 불러 올때 여러가지 투입 변수를 넣는데, 그 중 포스트의 메타값을 이용해 정렬 할 수 있는 투입변수가 아래와 같이 존재합니다.

  • order: 정렬 순서 결정(ASC, DESC)
  • orderby: 정렬의 기준이 되는 값
  • meta_key: 정렬의 기준이 되는 메타키

order

#order 는 정렬의 순서를 결정하는 투입변수입니다. 흔히 다른 쿼리문에서도 쓰이듯이 ASC(오름차순) 와 DESC(내림차순) 값을 넣을 수 있습니다.

orderby

#orderby 는 정렬의 기준이 되는 값을 선택합니다. 포스트의 제목으로 정렬하고 싶으면 title 을 넣으면 되고, 작성일을 기준으로 정렬하려면 date 를 넣으면 되고, 무작위 순서로 정렬하고 싶다면 rand 라는 값을 넣어주면 됩니다.

그외에도 다양한 옵션이 있으니 WordPress CODEX – get_posts 페이지를 참고 하시기 바랍니다.

우리는 #사용자정의필드 에 추가한 메타값을 이용해 정렬하려 하고 있으니, 여기에 meta_value 라는 값을 넣어주면 됩니다.

meta_key

#meta_key 에는 기준이 되는 메타키가 어떤 것인지를 지정해주면 됩니다. 임시로 만든 temp_date 라는 메타키에 들어간 각 포스트의 메타값으로 정렬하려고 하니 여기에 temp_date 라는 값을 넣어주면 됩니다.

포스트 목록 재정렬

결론적으로 위 내용을 정리 하자면 #temp_date 라는 메타키의 값을 기준으로 정렬 하되 오름차순으로 정렬하려고 합니다. 그리고 이것을 실제 코드로 표현하면 아래와 같습니다.

$args = array(
'order' => 'ASC',
'orderby' => 'meta_value',
'meta_key' => 'temp_date',
);
$post_list = get_posts( $args );

혼동 할 수 있는 부분이 orderby 에 그냥 temp_date 를 넣으면 되지 않을까라는 것인데, 안됩니다. 메타값으로 정렬하기 위해서는 위와 같은 방식을 이용해 주세요.

추가적으로 이미 #get_posts 함수에 들어갈 배열 형태의 투입변수 $args 를 만들어 두었는데 어떻게 하냐라는 경우가 있다면 아래와 같이 투입변수를 추가 할 수도 있습니다.

$args['order'] = 'ASC';
$args['orderby'] = 'meta_value';
$args['meta_key'] = 'temp_date';

$post_list = get_posts( $args );

위 코드는 정확히 처음의 코드와 같은 방식으로 작동 합니다.

끝.