베스트셀링 인기 워드프레스 테마 Top 30 자세한 정보

워드프레스 메인 페이지(전면 페이지)에서 특정 카테고리 글 제외

Last Updated: 2020년 10월 8일 | 2개 댓글
  • 네이버 블로그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기
  • 카카오스토리 공유하기

이전 글에서 루프에서 특정 카테고리의 글만 표시하거나 제외하는 방법을 살펴보았습니다. 메인 페이지에서 특정 카테고리의 글만 제외시키려면 어떻게 하면 될까요? 이 경우 ‘pre_get_posts’ 액션을 사용하면 쉽게 워드프레스 블로그의 첫 페이지에서 특정 카테고리의 글만 제외시킬 수 있습니다.

워드프레스 메인 페이지(전면 페이지)에서 특정 카테고리 글 제외하기

전면 페이지에 특정 카테고리의 글들을 표시하지 싶지 않은 경우 다음과 같은 코드를 사용할 수 있습니다.

function exclude_category( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'cat', '-1,-2' );
}
}
add_action( 'pre_get_posts', 'exclude_category' );

참고로 특정 카테고리의 글만 표시하려면 테마 소스 파일에서 다음 라인을 추가해주면 됩니다.

<?php query_posts("showposts=5&cat=1"); ?>

pre_get_posts 액션은 query variable object가 생성된 후, 그리고 실제 query가 실행되기 전에 호출됩니다. 그러므로 이 액션을 사용하면 표시하거나 제외할 글을 쉽게 제어할 수 있습니다. 가령 다음과 같은 함수를 사용하여 특정 특정 카테고리의 표시 순서를 변경할 수 있습니다. (아래의 경우 카테고리의 글을 알파벳순으로 정렬합니다.)

function wpsf_orderby( $query ) {
if ( is_admin() || ! $query->is_main_query() )
return;
// do conditional checks here and return on false.?

if ( is_category('uncategorized') ) {
remove_action( 'pre_get_posts', __FUNCTION__ );
add_filter( 'posts_orderby', function() { return ' post_title ASC'; } );
}
}

add_action( 'pre_get_posts', 'wpsf_orderby' );
// Source: wordpress.org

위의 코드는 사용 중인 테마의 함수 파일(functions.php)에 추가하도록 합니다. 테마가 업데이트되어도 코드가 사라지지 않도록 하려면 차일드 테마 (자식 테마)를 만들어 작업하시기 바랍니다. 이 작업을 위해서는 FTP에 접속할 수 있어야 합니다. FTP 사용법은 여기를 클릭하여 참고해보세요.

플러그인 사용하기

위의 방법이 어렵다면 플러그인을 사용하는 방법도 가능합니다.

워드프레스 특정 카테고리 글 제외 플러그인

Ultimate Category Excluder(UCE) 플러그인을 사용하면 프런트 페이지, 아카이브, 피드 및 검색에서 특정 카테고리를 쉽고 빠르게 제외시킬 수 있습니다. 제외할 카테고리를 선택하기면 하면 UCE 플러그인이 알아서 처리해주므로 매우 편리합니다.

하지만 플러그인을 많이 설치하면 사이트 속도에 영향을 미칠 수 있고, 경우에 따라 다른 플러그인이나 테마와 충돌을 일으킬 수 있으므로 가능한 경우 플러그인 사용을 최소화하는 것이 바람직합니다.

참고:



2 개 댓글

Leave a Comment

  1. 특정 카테고리만 전면 페이지/홈페이지에 표시하도록 하려면 마이너스 기호를 삭제하여 카테고리 ID를 추가하면 됩니다.

    $query->set( ‘cat’, ‘1, 2’ );

    카테고리 ID를 확인하는 방법은 https://www.thewordcracker.com/basic/how-to-check-post-page-and-category-id-in-wordpress/ 글을 참고하시기 바랍니다.

    응답
  2. 위에서 is_home()은 홈페이지(블로그 페이지)에 해당하고 전면 페이지(is_front_page())는 해당하지 않습니다. 전면 페이지까지 고려하려면 이론상 $query->is_home() 부분을 ($query->is_home() || $query->is_front_page())와 같이 바꾸어주면 될 것 같습니다. (이 글의 제목에서 “전면 페이지”란 표현이 빠져야 더 정확합니다.)

    응답