[wordpress] 워드프레스 첫 화면에 특정카테고리 안나오게 하기(혹은 특정카테고리만 나오게 하기)

워드프레스를 이용해서 홈페이지를 운영할때, 블로그 형식으로 운영하다 보니 첫화면에 최근 등록글이 주르륵 나온다.
크게 상관없지만.. 가끔 별로 중요하지 않은 카테고리의 글들을 뭉테기로 올릴때가 있는데.. 이렇게 하면 첫화면 별로 중요하지 않은 글들로 도배가 되어버린다.

그래서 첫화면에서는 특정 카테고리를 안나오게 끔 하고 싶은데…
(해당글을 보고싶으면 해당 카테고리로 들어가면 된다.)
역시나 나중에 내가 참고하려고 여기다 남겨놓는다.

구글링 해보니, 방법이 몇가지가 나오는데.. 그중에서도 테마의 functions.php 를 건드리는게 제일 적당하여 그 방법으로 진행하기로 했다.
(사실 테마의 파일을 직접 건드리는건 좋지 않다. 뒷부분에 해당 내용을 설명하겠다.)

우선 지금 사용하고 있는 테마의 functions.php 파일을 찾는다.
위치는 wp설치경로/wp-content/thems/해당테마/fuctions.php 가 있다.
이 functions.php는 필요한 php로직을 작성하고, action등에 사용할 수 있게 한다.

# vi ~/www/wp/wp-content/themes/twentyseventeen/functions.php

다음과 같은 코드를 추가한다.

function exclude_category( $query ) {
  if ( $query->is_home() && $query->is_main_query() ) {
    $query->set( 'cat', '-4' );  // ← 이부분은 수정해 줘야 함.
  }
}

add_action( 'pre_get_posts', 'exclude_category' );

내용은.. exclude_category() 라는 함수를 정의해놓고, ‘pre_get_posts’ 상황이 될때 실행하라고 add_action 하는 것이다.

pre_get_posts 는 해당 글을 가져오기 전에 실행되는 일종의 이벤트로 보면 될것이고.. 그때 실행될 exlude_category()함수를 보면..

쿼리가 is_home()이고, is_main_query() 라면.. (즉 첫화면이라면..) $query에 ‘cat’속성을 set() 해준다.
여기 cat 속성에 넣어주는 값은.. 카테고리ID라고 생각하면 되고, 워드프레스 카테고리 관리 화면에서.. 각 카테고리에 마우스를 올려놓으면 링크에 tag_ID를 통해서 확인할 수 있다.

특정 카테고리의 글만 가져오거나 반대로 가져오고싶지 않다면 다음과 같이 한다.

$query->set('cat', '1,2');  // 1,2카테고리 글만 가져온다.
$query->set('cat', '-4');   // 4번 카테고리 글은 제외한다.( '-'가 붙으면 제외라는 뜻이다.)

나같은 경우에는 위의 코드로 해결됐다.(특정 카테고리 글 제외하기)

한동안 잘 돌아갔는데.. 테마가 업데이트 되면서.. 업데이트를 실행했더니.. functions.php파일도 같이 업데이트 되면서 해당 내용이 날라갔다.

그래서.. 더 나은 방법으로.. 테마파일이 업데이트 되어도 영향이 없도록, child theme을 만들어서 수정해놨다. (child theme은 쉽게생각하면 테마를 상속받아서 필요한 부분만 건드린다고 생각하면 되겠다. parent theme이 변경돼도.. 내가 수정한부분은 그대로 남는다.)
이부분은 아래의 링크를 참고할 것

[wordpress] 워드프레스 자식테마(Child theme) 만들어보기

Loading