루프에서 특정 카테고리의 글만 표시/제외

오랜만에 여유가 되어 블로그를 조금 수정했다.

워드프레스의 루프에서 특정 카테고리의 글만을 표시하는 방법은 다음 코드를 사용하면 된다:

<?php query_posts('cat=1'); ?>

cat=1에는 해당 카테고리의 ID가 위치한다. 글 개수를 제한하려면 다음과 같은 코드를 사용할 수 있다. (카테고리 ID를 확인하려면 이 글을 참고해보시기 바랍니다.)

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

그런데 위와 같은 코드를 사용하면 해당 카테고리의 글들만 표시되기는 하지만 몇 가지 문제가 발생했다. 가령 글이 많아서 여러 페이지에 표시해야 하는 경우 첫 페이지에서는 잘 작동하지만 다른 페이지를 선택하면 첫 번째 페이지만 나타난다. 즉, 최근의 글들만 첫 페이지에 나타나고 이전 글들은 볼 수 없다는 문제가 발생한다(페이지 내비게이션 문제).

특정 카테고리의 글을 제외하려면 ID 번호에 마이너스(-) 기호를 붙이면 된다.

<?php query_posts('cat=-1'); ?>

약간의 문제가 있지만 위의 코드는 많은 경우 유용하게 사용할 수 있다.

만약 위와 같은 문제가 없도록 하려면 다음과 같은 코드의 사용도 고려해볼 수 있다.

<?php $top_query = new WP_Query('cat=1'); ?>
<?php while($top_query->have_posts()) : $top_query->the_post(); ?>

그리고 특정 카테고리의 글을 제외하는 코드로 다음과 같은 코드도 사용할 수 있다.

query_posts($query_string . '&cat=-1' );

이 코드의 경우 페이지 내비게이션 문제는 발생하지 않지만 붙박이 글(Sticky Post)이 표시되지 않는다.


추가

위의 방법은 워드프레스 테마 소스를 직접 수정하게 됩니다. 다소 번거로운 작업이 될 수 있고 추후에 유지관리도 어려울 수 있습니다. 다른 방법으로 pre_get_posts 액션을 사용하는 방법이 있습니다. 자세한 내용은 "홈 페이지에 하나의 카테고리만 표시되도록 하기" 글을 참고해보시기 바랍니다.

일부 글에 제휴 링크가 포함될 수 있으며 파트너스 활동으로 일정액의 수수료를 받을 수 있습니다.

댓글 남기기

* 이메일 정보는 공개되지 않습니다.