워드프레스 홈페이지에 특정 카테고리 글을 표시하는 방법

Last Updated: 2024년 04월 28일 | | 9개 댓글

워드프레스 전면 페이지에 특정 카테고리 글들이 표시되도록 하고 싶은 경우가 있습니다. 아바다, 뉴스페이퍼, Divi 등 유료 테마를 사용하거나 엘리멘터 프로를 사용한 경우 특정 카테고리 글들을 특정 페이지에 표시할 수 있습니다. 다른 방법으로 읽기 설정에서 최신 글을 표시하도록 설정한 경우, 몇 가지 방법으로 특정 카테고리 글들이 표시되도록 하거나 카테고리 페이로 리디렉션시킬 수 있습니다.

[ 이 글은 2024년 4월 27일에 마지막으로 업데이트되었습니다. ]

테마 또는 페이지 빌더의 기능 사용하기

뉴스페이퍼, 아바다 등 유료 테마를 사용하거나 엘리멘터 프로를 사용하는 경우 블로그 요소/위젯을 통해 전체 글 또는 특정 카테고리 글들이 표시되도록 할 수 있습니다.

  1. Home 페이지를 만든 다음, 포스트/블로그 위젯을 배치하고 특정 카테고리 글들을 표시합니다.
  2. 설정 » 읽기 » 최신 글에서 홈페이지를 선택하고 특정 카테고리 글들이 표시된 페이지(예: Home)를 홈페이지로 지정합니다.
워드프레스 홈페이지 설정

아바다 테마의 경우 Blog 엘리먼트에서 카테고리를 지정할 수 있습니다.

아바다 테마 블로그 설정

Divi 테마에서도 Blog 엘리먼트에서 카테고리를 지정할 수 있습니다.

Divi 테마 블로그 설정

Elementor Pro를 사용하는 경우 Posts 위젯을 배치하고 Query 섹션에서 카테고리를 지정할 수 있습니다.

엘리멘터 프로 블로그 설정

엘리멘터의 포스트 위젯에 대한 자세한 내용은 다음 글을 참고해보세요.

아바다, Divi, 엘리멘터 등을 사용하면 테마 파일을 수정할 필요 없이 전체 사이트를 편집할 수 있습니다.

전면 페이지에 최신 글을 표시하는 경우

워드프레스의 설정 » 읽기에서 전면 페이지로 "최신 글" 또는 "정적인 페이지" 중 하나를 선택하여 설정할 수 있습니다. 홈페이지 표시에서 최신 글을 설정하면 블로그 글들이 홈페이지에 표시됩니다.

홈페이지 설정

이 상황에서 특정 카테고리 내의 글만 워드프레스의 전면 페이지(홈페이지)에 표시되도록 하려면 어떻게 하면 될까요? 몇 가지 방법을 생각해볼 수 있습니다. 다음 방법 중 사용 중인 테마와 궁합이 가장 잘 맞는 방법을 사용하시면 됩니다.

index 페이지에 카테고리 쿼리 코드 추가하기

제일 간단한 방식은 index.php 파일에 다음과 같은 코드를 추가하는 것입니다.

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

여러 개의 카테고리를 추가하려면 query_posts('cat=8,4,3'); 형식을 사용합니다. 위에서 '3'은 카테고리 ID입니다. 해당 카테고리 ID로 대체하시기 바랍니다. 카테고리 ID를 확인하는 방법은 이 글을 참고하십시오.

그럼 위의 코드를 어디에 추가하면 될까요? 루프문이 시작되기 직전에 추가하면 됩니다.

wordpress index loop - 워드프레스 루프문

위의 그림과 같이 while (have_posts()) 바로 위에 추가할 수 있습니다. 잘 작동하지 않으면 캐시(브라우저 캐시/플러그인 캐시)를 삭제하고 테스트해보십시오. 그래도 잘 안 되면 아래의 방법을 시도해보시기 바랍니다.

차일드 테마를 설치하여 작업하시기 바랍니다. 그렇지 않을 경우 테마가 업데이트될 때 수정 사항이 사라지게 됩니다.

add_action 함수 코드 추가하기

두 번째로 생각해볼 수 있는 방법으로 add_action 함수를 사용하는 것입니다. 다음 함수를 함수 파일에 추가하도록 합니다.

function my_home_category( $query )  {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'cat', '11');
}
}
add_action( 'pre_get_posts', 'my_home_category' );
// Source: https://premium.wpmudev.org/blog/one-category-wordpress-homepage/

여러 개의 카테고리를 지정할 경우에는 다음과 같은 형식을 사용합니다.

$query->set( 'cat', '11, 14' );

페이지 템플릿 사용하기

마지막으로 페이지 템플릿 사용을 고려할 수 있습니다. category.php 또는 archive.php 파일의 내용을 복사하여 새로운 페이지를 하나 만들고 복사한 내용을 붙여넣기 합니다(예: homepage.php). 그런 다음 헤더 부분을 다음과 비슷하게 수정합니다.

<?php
/*
* Template Name: 전면 페이지 템플릿
*/
get_header(); ?>

템플릿 이름은 적절히 수정합니다. 이제 루프문 앞에 다음과 비슷한 코드를 추가합니다.

<?php query_posts('category_name=카테고리이름&showposts=5');

query_posts를 사용하여 문제가 발생할 경우 WP_query()를 사용해봅니다.

$query = new WP_Query('category_name=Category&posts_per_page=4');
if($query->have_posts()) : while($query->have_posts()) : $query->the_post();
...

WP_query(), query_posts(), pre_get_posts이에 대한 내용은 이 글을 참고하시기 바랍니다.

이제 새로운 페이지를 하나 만들고(예: "홈페이지" 혹은 원하는 이름으로) 템플릿을 위에서 만든 템플릿(예: 전면 페이지 템플릿)으로 지정합니다.

Front Page Template - 워드프레스 페이지 템플릿 지정

페이지에 내용은 입력하지 않고 저장합니다. "설정 > 읽기"에서 "정적인 페이지"로 선택하고 방금 저장했던 페이지(예: 홈페이지)를  지정합니다. 이제 홈페이지를 방문하면 지정한 카테고리의 글들이 표시될 것입니다.  (참고로 이 방법은 워드프레스 테마에 따라 달라질 수 있습니다.)

추가:

082net님이 제안한 방법으로 리디렉션(redirection)시키는 방법도 생각해볼 수 있습니다.  자세한 내용은 이 글을 참고해보시기 바랍니다. 링크의 내용 대신 간단히 wp_redirect() 함수 코드를 index.php 파일 맨 위에 추가하여 특정 카테고리로 이동시키는 방법도 가능할 것 같습니다.

참고


9 개 댓글

Leave a Comment

  1. index.php 는 테마 폴더안에 있는 파일이겠죠..? 근데 여기에 나온 while (have_posts())이 없어서 찾아봤는데 template_full.php 에 있긴한데 수정해봐도 안되네요 하..어렵습니다..

    응답
  2. 우연히 이 글을 보고 시험 삼아 적용해보았는데요.
    잘되네요.
    Visual Composer를 안쓰면서도 조금 폼나는 전면 디자인을 고민하는데
    카테고리를 가져오는게 이 방법이 그나마 차선책이 되었네요.

    잘 보고갑니다.

    응답