star
YOUR NAME

Blog Story

워드프레스 이전 글 다음 글 카테고리 내에 표시하는 방법

By on 2월 24th, 2024

워드프레스 블로그 하단에 이전 글과 다음 글을 표시하는 부분을 가만히 보니.. 당연히 카테고리 내에서 앞 뒤 글이 표시 될 줄 알았는데, 워프 에서는 그냥 글이 발행 된 순서대로, 새로 추가 된 글이 뜨더군요.

좀 일관성이 없어 보여 같은 카테고리에 있는 글들 순서로 이전 글과 다음 글을 표시하는 방법은 없을까? 했는데..

다행히 있었습니다.

블로그의  게시물들이 아주 같지는 않더라도 서로 비슷한 주제에 대해 다룬 다면 별 상관없이 크게 거슬리지 않을 수도 있겠지만,

 

이전글-다음글

 

만약 예를 들어 컴퓨터 관련 카테고리 글을 하나 발행하고, 그 다음 날 전혀 상관없는 ‘나 어디서 뭐 했다’ 라는 지극히 일상적인 잡글을 하나 쓸 경우, 다음 글로 먼저 쓴 컴퓨터 관련 글과 상관 없는 오늘 쓴 아무개 글이 표시 된다는 거죠.

제가 쓰는 테마의 경우, 이런 식의 위젯 형태로 표시되고 있는데요, 

 

워드프레스 이전 글

 

대부분의 워프 테마에서 지원하는 기능으로 알고 있습니다.

이 기능이 굳이 필요한 가 없애 버리려고 했는데 또 없으면 너무 심심할 것 같군요, 블로그 하단도 좀 풍성해 보이는 효과도 있고 말이지요.

이 부분의 다음 글을 글 발행 날짜와 상관 없이

카테고리 내에서만 이전/다음 글로 표시되게 하는 필터 소스입니다.

add_filter( 'get_next_post_join', 'navigate_in_same_taxonomy_join', 20);
add_filter( 'get_previous_post_join', 'navigate_in_same_taxonomy_join', 20 );
function navigate_in_same_taxonomy_join() {
	global $wpdb;
	return " INNER JOIN $wpdb->term_relationships AS tr ON p.ID = tr.object_id INNER JOIN $wpdb->term_taxonomy tt ON tr.term_taxonomy_id = tt.term_taxonomy_id";
}


add_filter( 'get_next_post_where' , 'navigate_in_same_taxonomy_where' );
add_filter( 'get_previous_post_where' , 'navigate_in_same_taxonomy_where' );
function navigate_in_same_taxonomy_where( $original ) {
	global $wpdb, $post;
	$where 		= '';
	$taxonomy  	= 'category';
	$op 		= ('get_previous_post_where' == current_filter()) ? '<' : '>';
	$where 		= $wpdb->prepare( "AND tt.taxonomy = %s", $taxonomy );
	if ( ! is_object_in_taxonomy( $post->post_type, $taxonomy ) )
		return $original ;

	$term_array = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) );

	$term_array = array_map( 'intval', $term_array );

	if ( ! $term_array || is_wp_error( $term_array ) )
		return $original ;

	$where 		= " AND tt.term_id IN (" . implode( ',', $term_array ) . ")";
	return $wpdb->prepare( "WHERE p.post_date $op %s AND p.post_type = %s AND p.post_status = 'publish' $where", $post->post_date, $post->post_type );
}

해당 코드를 복사하여 테마 내에 functions.php 파일 내 적당한 곳에 넣어 주면 끄읏~간단하게 해결이 되었습니다.

코드 적용 후 확인해 보니 잘 작동되는 군요, 관련 글을 표시해 같이 쓰면 중복되는 면도 없지 않아 있지만 그래도 아주 엉뚱한 주제의 글이 나오는 것 보다 나은 것 같으니 필요하신 분들은 한 번 적용해 보시길 바랍니다.

TAGS
RELATED POSTS

more

LEAVE A COMMENT

CATEGORY
ABOUT