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

Last Updated: 2020년 10월 08일 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. 위에서 is_home()은 홈페이지(블로그 페이지)에 해당하고 전면 페이지(is_front_page())는 해당하지 않습니다. 전면 페이지까지 고려하려면 이론상 $query->is_home() 부분을 ($query->is_home() || $query->is_front_page())와 같이 바꾸어주면 될 것 같습니다. (이 글의 제목에서 "전면 페이지"란 표현이 빠져야 더 정확합니다.)

    응답