본문 바로가기

워드프레스

[워드프레스]포트폴리오 같은 카테고리내에서만 이동

워드프레스에서 portfolio 나 post 등은 페이지에서 다음 포스트(또는 포트폴리오)로 넘어가는 버튼을 만들 수 있는데, 다음 이전 버튼을 눌렸을때 한 카테고리에 속하는 포스트끼리만 페이지 이동이 가능하게 하고 싶어서 찾아본 방법입니다!

 


1. 포트폴리오 페이지 카테고리 만들기

포트폴리오 페이지(post / 블로그 등)의 오른쪽 상단에 'Portfolio Categories' 에서 각 페이지의 카테고리를 생성하고 선택할 수 있습니다. 

왼쪽 포트폴리오 메뉴안에 서브 메뉴 'Portfolio Categories'에서 카테고리를 지우고 생성하는것도 가능합니다.


2. 같은 카테고리 안에서만 previous / next 버튼으로 (다음글/이전글) 이동 방법 01

(* 테마별로 파일 명과 코드가 조금씩 다를 수 있습니다! )

그래서 찾기 힘들었는데, 그래도 골자는 같아용.

 

 

a. 포트폴리오 php 파일 찾기

왼쪽 메뉴 테마디자인 - 테마 편집기 - single.php 파일 열기

파일명이 테마마다 다릅니다. 포트폴리오/ 포스트등 파일이 다릅니다. 원하시는 파일을 찾아야 합니다.

(저는 zuke테마를 사용했고 파일명은 'single-la-portfolio.php' 이었어요! )

 

 

b. php파일에서 관련 내용 찾기

이전글 / 다음글 버튼이 생성되는 부분의 php 내용을 찾습니다.

관련 PHP Code Reference

https://developer.wordpress.org/reference/functions/previous_post_link/

 

WordPress Developer Resources | Official WordPress Developer Resources

Official WordPress developer resources including a code reference, handbooks (for APIs, plugin and theme development, block editor), and more.

developer.wordpress.org

https://codex.wordpress.org/Next_and_Previous_Links

 

Next and Previous Links « WordPress Codex

Languages: English • 日本語 (Add your language) The Next and Previous post links guides your visitor through your WordPress site. When it comes to creating strong site-wide navigation, some of the most powerful tools for moving your visitor around are

codex.wordpress.org

참고 했던 내용입니다. 관련내용을 찾아서 수정해줘야 합니다! 

 

 

c. php파일에서 관련 내용 수정하기

형광표시 해놓은부분이 동일 카테고리에서 이동시킬지 아니면 모든 글에서 이동시킬지 설정할 수 있는 코드입니다.

(내용이 동일하지 않아서 찾는데 오래걸렸어요. ㅠㅠ)

true = 동일 카테고리 내에서만 이동

false = 모든 카테고리에서 이동

 

아래는 zuke 테마에서 수정했던 부분입니다.

찾아보면서 다른 방법도 있는듯 한데, 이방법이 잘 적용되고 수정도 간단해서 사용했습니당!


2. 같은 카테고리 안에서만 previous / next 버튼으로 (다음글/이전글) 이동 방법 02

 

a. php함수 추가하기

테마디자인 - 테마편집기 - function.php파일열기

하단의 아래의 사용자 함수를 추가해주면 같은 카테고리 내에서만 이동하도록 적용됩니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 워드프레스 글 하단에 표시되는 이전 글/다음 글 내비게이션을 카테고리로 제한
// Restrict the post navigation to the same category
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: https://presscustomizr.com/
cs

 

 

 

2020/04/06 - [워드프레스/플러그인] - 워드프레스 플러그인 ' Menu Image, Icons made easy'