상현에 하루하루
All 개발자의 하루

워드프레스 기본 카테고리, 태그에 커스텀 포트스타입이 노출되지 않는 문제

( 업데이트: )

기본적으로 WordPress는 기본 카테고리 및 태그 아카이브에 커스텀포스트 타입을 포함하지 않습니다.하지만 CPT에서 기본 카테고리와 태그를 추가해줬는데 노출이 되지 않아서 의아했습니다.

그렇다면 기본 카테고리 및 태그 아카이브 쿼리에 커스텀 포스트타입을 직접 추가해야합니다.

CPT UI로 추가한 포스트타입 모두 추가하기

이 예제는 cptui_get_post_type_slugs() 함수로 인해 Custom Post Type UI 1.3.0 이상이 필요합니다.

function my_cptui_add_post_types_to_archives( $query ) {
	// We do not want unintended consequences.
	if ( is_admin() || ! $query->is_main_query() ) {
		return;    
	}

	if ( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {
		$cptui_post_types = cptui_get_post_type_slugs();

		$query->set(
			'post_type',
			array_merge(
				array( 'post' ),
				$cptui_post_types
			)
		);
	}
}
add_filter( 'pre_get_posts', 'my_cptui_add_post_types_to_archives' );

이 코드에서 카테고리 아카이브 또는 태그 아카이브에 있는지, 필터를 억제하지 않는지 확인합니다. 해당 조건을 통과한다면 모든 CPT UI 기반의 포스트 타입 슬러그 배열을 가져와서 포스트 배열에 병합하여 쿼리 매개변수로 전달합니다.

특정 포스트타입만 아카이브에 포함

function my_cptui_add_post_types_to_archives( $query ) {
	// We do not want unintended consequences.
	if ( is_admin() || ! $query->is_main_query() ) {
		return;    
	}

	if ( is_category() || is_tag() && empty( $query->query_vars['suppress_filters'] ) ) {

		// Replace these slugs with the post types you want to include.
		$cptui_post_types = array( 'my_post_type', 'my_other_post_type' );

		$query->set(
	  		'post_type',
			array_merge(
				array( 'post' ),
				$cptui_post_types
			)
		);
	}
}
add_filter( 'pre_get_posts', 'my_cptui_add_post_types_to_archives' );

이 스니펫은 CPT UI의 특정 포스트 타입만 포함한다는 점을 제외하면 첫 번째 스니펫과 매우 유사합니다.

포함하려는 게시물 유형 슬러그를 my_post_typemy_other_post_type을 변경해주면 됩니다.

카테고리 or 태그

카테고리 아카이브 또는 태그 아카이브 중 하나만 사용하려는 경우 두 번째 if 문을 다음과 같이 수정합니다.

if ( is_category() && empty( $query->query_vars['suppress_filters'] ) )
if ( is_tag() && empty( $query->query_vars['suppress_filters'] ) )