다음 그림은 예제의 검색 폼으로 미디어 종류는 분류 ‘mediacat’의 term 이름을 라디오 버튼으로, 카테고리는 분류 ‘photocat’의 term 이름을 드롭다운 목록으로 출력한 것입니다.
두 분류의 term 출력에 사용한 워드프레스 함수는 다음과 같은데, 분류 photocat의 term 출력에 사용한 wp_dropdown_categories
함수는 내부적으로 get_terms
함수를 사용합니다.
- get_terms
- wp_dropdown_categories
클래스 WP_Term_Query
지난 과정에서 분류의 term 데이터 쿼리를 위한 WP_Term_Query
클래스는 역시 분류의 term 데이터를 반환하는 get_terms
함수와 비교하면 쿼리 캐싱이 있어 성능에 이점이 있다고 말했습니다. 그러나 실제로 어떤 것이 좋다고 말하기 어려우며, 성능의 이점을 체감하는 것도 쉽지 않습니다.
쿼리 클래스와 함수를 사용했을 때의 차이만 확인해봅니다. 편집기에 연습장 파일이 열려 있지 않다면 열고, 기존에 추가한 코드는 지우고 다음 코드를 추가한 후 사이트에서 연습장 페이지에 접근합니다.
/* WP_Term_Query */
$class_wp_term_query = new WP_Term_Query( array(
'taxonomy' => 'mediacat',
'hide_empty' => false,
) );
echo '<pre>' . print_r( $class_wp_term_query, true ) . '</pre>';
/* get_terms */
$func_get_terms = get_terms( array(
'taxonomy' => 'mediacat',
'hide_empty' => false
) );
echo '<pre>' . print_r( $func_get_terms, true ) . '</pre>';
/* WP_Term_Query - terms 프로퍼티(멤버 변수)*/
echo '<pre>' . print_r( $class_wp_term_query->terms, true ) . '</pre>';
연습장 페이지의 결과를 축약하여 나타내면 다음과 같은데, 위의 코드 16번 줄은 get_terms
함수를 사용할 때의 결과와 같다는 것을 다음 25번 줄 아래의 오브젝트 데이터로 알 수 있습니다.
/* WP_Term_Query */
WP_Term_Query Object
(
[request] =>
[meta_query] => WP_Meta_Query Object
[meta_query_clauses:protected] =>
[sql_clauses:protected] => Array
[query_vars] => Array
[query_var_defaults] => Array
[terms] => Array
(
[0] => WP_Term Object
[1] => WP_Term Object
[2] => WP_Term Object
)
)
/* get_terms */
Array
(
[0] => WP_Term Object
[1] => WP_Term Object
[2] => WP_Term Object
)
/* WP_Term_Query - terms 프로퍼티(멤버 변수)*/
Array
(
[0] => WP_Term Object
[1] => WP_Term Object
[2] => WP_Term Object
)
예제에서는 WP_Term_Query
클래스를 사용하지만, 예제 구성에 특정 이점이 있어서 사용하는 것이 아니라 해당 클래스를 경험하는 데 초점을 두며, 예제를 벗어나 term 데이터 활용이 필요할 때 조금 더 유리한 방법을 선택하기 바랍니다.
검색 폼 분류 term 데이터
검색 폼에서 사용한 get_terms
함수와 wp_dropdown_categories
함수를 WP_Term_Query
클래스로 대체하여 term 데이터를 출력합니다. 편집기로 테마 루트의 searchform.php 파일을 엽니다.
다음 1번에서 5번 줄을 찾아 삭제하고 7번에서 17번 줄을 추가하고 저장합니다.
$mediacat_terms = get_terms( array( 'taxonomy' => 'mediacat', 'hide_empty' => false ) );
foreach ( $mediacat_terms as $term ) {
$term_name = $term->name;
echo '<label><input ' . checked( $tax_mediacat, $term_name, false ) . 'type="radio" name="mediacat" value="' . $term_name . '"> ' . $term_name . '</label>';
}
/* WP_Term_Query */
$mediacat_terms = new WP_Term_Query( array(
'taxonomy' => 'mediacat',
'hide_empty' => false,
) );
if ( ! empty( $mediacat_terms ) ) {
foreach ( $mediacat_terms ->terms as $mterm ) {
$mterm_name = $mterm->name;
echo '<label><input ' . checked( $tax_mediacat, $mterm_name, false ) . 'type="radio" name="mediacat" value="' . $mterm_name . '"> ' . $mterm_name . '</label>';
}
}
다음의 1번에서 13번 줄을 찾아 삭제하고, 15번에서 28번 줄을 추가한 후 저장합니다.
$args = array(
'show_option_all' => '전체',
'orderby' => 'name',
'show_count' => false,
'selected' => $tax_photocat,
'name' => 'photocat',
'id' => 'photocat',
'class' => 'select_photocat',
'taxonomy' => 'photocat',
'value_field' => 'name',
'hide_empty' => false
);
$select_photocat = wp_dropdown_categories( $args );
/* WP_Term_Query */
$photocat_terms = new WP_Term_Query( array(
'taxonomy' => 'photocat',
'hide_empty' => false,
) );
echo '<select name="photocat" id="photocat" class="select_photocat">';
echo '<option value="">전체</option>';
if ( ! empty( $photocat_terms ) ) {
foreach ( $photocat_terms->terms as $pterm ) {
$pterm_name = $pterm->name;
echo '<option value="' . $pterm_name . '"' . selected( $tax_photocat, $pterm_name ) . '>' . $pterm_name . '</option>';
}
}
echo '</select>';
위의 코드 25번 줄 selected
워드프레스 함수는 폼의 드롭다운 목록에서, 예제 기준으로 검색 쿼리 변수(검색 폼에서 선택한 데이터)에 해당하는 값이 선택된 상태로 출력하는 유용한 함수로 지난 과정의 checked
함수와 같은 유형입니다.
검색 폼이 출력되는 사이트 페이지에서 검색 폼의 분류 term 목록이 올바르게 출력되는지 확인하세요.
다음은 이번 장의 변경 파일을 받을 수 있는 링크로, 압축을 풀어 테마 루트에 덮어쓰세요. 파일에는 기존 코드를 지우지 않고 비활성화하여 그대로 두었습니다.
검색 폼에서 WP_Term_Query
클래스로 출력한 term 데이터는 나중에 Transient API 사용으로 다시 변경할 것입니다.
예제 목차
2. XAMPP, 워드프레스, 테마, 플러그인 설치와 설정
4. page 포스트 타입과 페이지 템플릿, 메뉴 구성
10. 타입 attachment 템플릿과 image.php
13. 이미지 메타 데이터를 포스트 메타 데이터에 추가
14. Attachment 타입을 위한 워드프레스 커스텀 분류 등록
15. 이미지 메타 데이터를 워드프레스 분류와 필드 데이터에 저장
16. 이미지를 편집할 때 포스트 데이터와 메타 데이터 업데이트
19. 워드프레스 아바타와 Author Archives
21. 워드프레스 폼 요소로 원하는 이미지 사이즈 다운로드
22. 워드프레스 텍스트 단락 및 줄 바꿈, wpautop
25. 워드프레스 attachment 포스트 타입의 아카이브
26. 워드프레스 함수로 자바스크립트 변수 데이터 생성
28. 워드프레스 커스텀 검색 – 검색 폼과 쿼리 데이터
29. 워드프레스 커스텀 포스트 타입 ‘pic_album’
34. wpdb 클래스로 구글 지도에 마커와 섬네일 표시
» 워드프레스 분류 데이터 쿼리 클래스, WP_Term_Query
41. 워드프레스 분류의 term 데이터를 캐시 데이터로 생성
42. 워드프레스 역할 그룹과 권한으로 구성 요소 제어
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