기록을 하지 않았더니, 수정한 부분을 계속 까먹어서 일단 기록
현재(17-12-22) 사용 중인 Mechanic Theme의 경우 ‘인용’,’추가정보’ 등 글 형식을 지정하면 ‘기본’글과 다른 방식으로 화면에 표시가 된다. 입력도 실제 본문이 아닌 별도의 영역에 입력을 하게 되어 있다. 본문이 실제로 없는데도 본문 아래에 있는 Post Navigation(이전글/다음글 표시)에는 목록이 보이고 있어 Post Navigation 영역을 추가로 수정하였다. 최근글 목록도 마찬가지.
functions.php 수정 – 이전 수정에 이어서 붙여넣으면 됨
// To ignore specific category in post navigation if ( ! function_exists( 'vslmd_post_nav' ) ) : /** * Display navigation to next/previous post when applicable. */ function vslmd_post_nav() { // Don't print empty markup if there's nowhere to navigate. $previous = ( is_attachment() ) ? get_post( get_post()->post_parent ) : get_adjacent_post( false, '', true ); $next = get_adjacent_post( false, '', false ); if ( ! $next && ! $previous ) { return; } $excluded_terms = array(91); // 91 is hidden and parents of 89 is quote, 90 is aside, parents category didnt work. ?> <nav class="navigation post-navigation" role="navigation"> <h1 class="screen-reader-text"><?php _e( 'Post navigation', 'vslmd' ); ?></h1> <ul class="pager"> <?php previous_post_link( '<li class="previous">%link</li>', _x( '<span class="meta-nav">←</span> %title', 'Previous post link', 'vslmd' ), false, $excluded_terms ); next_post_link( '<li class="next">%link</li>', _x( '%title <span class="meta-nav">→</span>', 'Next post link', 'vslmd' ), false, $excluded_terms ); ?> </ul><!-- .nav-links --> </nav><!-- .navigation --> <?php } endif; //http://blog.grokdd.com/exclude-recent-posts-by-category/ //we should add '-' to exclude function exclude_posts_from_recentPostWidget() { $exclude = array( 'cat' => '-91' ); return $exclude; } add_filter('widget_posts_args','exclude_posts_from_recentPostWidget');
Line 1~27
: 테마의 기본 영역이 아닌 테마 내 플러그인의 template 파일(테마/inc/template-tags.php
)에서 post_navigation을 불러오게 되어 있다. Line 20
의 previous_post_link
가 이전글의 정보를 가져와 내가 원하는 방식으로 화면에 뿌려주는 워드프레스의 기본 function이다. previous(next)_post_link function
은 add_fiilter 후킹이 되지 않고, 내부의 previous_adjacent_post
등은 후킹이 가능하나 excluded_terms
이 설정되어 있지 않으면 이 함수를 거치지도 않는다. 또다른 함수 2개가 후킹이 가능한 것을 확인했으나, 이 둘은 database의 query를 건드리는 방식이라 너무 위험했다.
결국 template의 함수 영역을 통째로 function.php로 불러왔다. template에서의 함수는 if로 시작해서 endif;로 끝이 난다. 같은 구문이 function.php에 있으면 function.php의 것을 우선시하게 되어 있다. 실제 수정된 부분은 Line 14
가 추가 되었고, Line 20
의 previous_post_link
에 $excluded_terms
가 추가되었다. $excluded_terms
는 실제 워드프레스 함수에 있는 argument이다.
‘인용’,’추가정보’를 각각 카테고리를 만들고 그 위에 상위 카테고리 ‘숨김’을 만들어 글 등록시 ‘숨김’과 ‘인용’ 또는 ‘숨김’과 ‘추가정보’를 모두 지정한다. ‘숨김’의 카테고리 번호가 91번이라서 array에 91을 넣었다. $excluded_terms
에는 반드시 실제로 지정된 카테고리를 넣어야 한다. ‘숨김’이 ‘인용’의 상위 카테고리라고 하더라도 실제 글에서 ‘인용’만 체크되어 있으면 exclude 되지 않는다.
line 29~35
: 풋터에 있는 최근글 위젯에서 특정 카테고리를 없앤다. 관련 플러그인이 많지만 구글링해보니 간단한 필터로 적용이 가능했다. post_navigation과는 다르게 카테고리 번호에 -를 붙여야 exclude가 된다. 주석의 원문 블로그에 방문하면 post_navigation도 필터로 처리하는 함수를 찾을 수 있다.