[워드프레스] 동일 카테고리 내에서 이전/다음 글로 이동하도록 제한하기

참고: 인기 테마인 BE 테마(33%)The 7(35%) 할인 행사를 진행하고 있습니다.
참고

워드프레스에서 previous_post_link 함수와 next_post_link 함수를 사용하여 개별 글에서 이전 글과 다음 글로 이동할 수 있는 내비게이션을 추가할 수 있습니다. 보통은 카테고리에 관계 없이 이전/다음 글로 이동하게 됩니다. 같은 카테고리 내에서만 이동하도록 하고 싶은 경우가 있을 수 있습니다. 이 경우 다음과 같은 사용자 함수를 테마의 함수 파일에 추가하면 됩니다.

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 );
}
// Source: presscustomizr.com

위의 코드를 사용 중인 워드프레스 테마의 자식 테마를 만들어 자식 테마 내에 있는 functions.php 파일에 추가하면 됩니다. 자세한 방법은 이 글을 참고해보세요.

위의 방법이 잘 안 되면 이 글에 나와 있는 코드로 시도해보시기 바랍니다. 링크된 글에서는 테마의 소스 파일(예: single.php)에서 직접 추가하는 방법이네요. 사실 이렇게 테마 파일을 수정하는 것은 바람직하지 않을 수 있지만 위의 후크가 제대로 먹히지 않으면 이 방법을 사용해야 할 것 같습니다. 현재 이 블로그에 사용 중인 테마(Pluto)에서는 위의 필터를 적용하니까 잘 작동하는 것을 확인할 수 있었습니다.

앞의 두 방법이 제대로 작동하지 않으면 이 WordPress Stackexchange의 글에 나와 있는 코드로 시도해볼 수 있을 것 같습니다.



기부를 통해 이 블로그를 후원하실 수 있습니다.
워드프레스 설치/제작/문제해결이 필요한 경우 서비스(유료)를 요청해주세요.