카테고리에 따른 사이드바 위젯 다르게 보이기

사이트를 운영할 때 고정적으로 사용하는 우측의 사이드바 위젯이 있는 반면, 카테고리별로 다르게 보여주고 싶을 때가 있다.

오전에 페이스북에 한 유저분이 올린 글을 보고 정리를 해드려야겠다는 생각이 들었다.

혹시 해외에는 방법이 있나 싶어 워드프레스 서포트 사이트를 뒤져 보았지만 5년전에 올라온 글이라 별로 현재 버전에 맞지도 않았다. 

그래서 레퍼런스 사이트를 뒤져보다가 http://codex.wordpress.org/Function_Reference/dynamic_sidebar 위 내용을 조금 읽어보니 문법을 만들면 될 수 있겠다 싶어서 아래와 같이 만들어 보았다. (테마마다 다를 수 있다는 것은 염두해 두어야한다.)

혹 코드에 문제가 있다면 언제든지 피드백 환영합니다.


1. 용도별로 사이드바 영역을 만들어 놓는다.

파일 : /wp-content/themes/사용하는테마폴더/functions.php

function.php 파일을 열어보면 아래 이미지와 같이 소스가 보인다.  어두운 색으로 선택된 것이 추가한 코드이다.

카테고리별로 사이드바 다르게 설정하기 코드
바로 위에있는 코드를 복사해서 name 부분에 Sidebar2로 바꿔서 붙여 넣은 것밖에 없다.

아래 코드가 위 그림에서 선택해서 보여준 코드이다.

register_sidebar(array(
'name' => 'Sidebar2',
'description' => 'Widgets in this area will be shown in the sidebar.',
'before_widget' => '<div class="sidebar-box clearfix">',
'after_widget' => '</div>',
'before_title' => '<h1>',
'after_title' => '</h1>',
));

이렇게 추가하면 아래 이미지처럼 관리자의 대시보드→외모→위젯으로 가면 추가된 사이드바가 보인다.

카테고리별로 사이드바 다르게 설정하기 추가된 사이드바


2. 사이드바를 카테고리에 따라 구별되어 나오게 한다.

파일 : /wp-content/themes/사용하는테마폴더/sidebar.php

파일을 열어보면 사이드바를 불러오는 코드가 있다. 아래와 비슷한 코드가 있는 지 살펴보자.

<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar') ) : ?><?php endif; ?>

 위 코드를 보면 'Sidebar'라고 입력된 것이 보일 것이다. 이 것이 functions.php에서 보았던 기존의 사이드바 불러오는 코드다.

위 코드를 지우고 아래 코드로 대체해보자.

	<?
	$category = get_the_category();
	$category_number = $category[0]->cat_ID;
		if($category_number == 140){ ?>
		<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar2') ) : ?><?php endif; ?>
		<?}else{?>
		<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar') ) : ?><?php endif; ?>
		<?}?>

 위 코드의 설명은 <카테고리 id 값이 140이라면 사이드바는 'Sidebar2'로 나오게 하라. 그렇지 않으면 (다른 카테고리라면) 사이드바는 'Sidebar'로 나오게 하라. > 라는 것이다.

(카테고리 id 값 알아내기는 이 곳을 클릭하여 참고한다.)

그런데 사이드바 'Sidebar2'가 여러 카테고리에 노출되어야 할 경우가 있다. 그럴 경우에 위 코드 중에 아래 코드를 찾아서 수정하자.

if($category_number == 140){ ?>

 위 코드를 카테고리 id가 140 인 것과 141, 142 인 카테고리에도 추가되어야한다면 아래처럼 수정한다.

if($category_number == 140 || $category_number == 141 || $category_number == 142){ ?>

 이렇게 만들면 카테고리 id 값이 140, 141, 142인 것에 'Sidebar2'가 사이드바로 노출이 된다.

그런데 이번에는 조금 더 다양하게 응용해보자.

카테고리 id 값이 140인 것은 'Sidebar2' , 141인 것은 'Sidebar3', 142인 것은 'Sidebar4', 그 외의 것들은 'Sidebar'로 노출되게 해보자.

<?
	$category = get_the_category();
	$category_number = $category[0]->cat_ID;
		if($category_number == 140){ ?>
		<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar2') ) : ?><?php endif; ?>
		<?}else if($category_number == 141){?>
		<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar3') ) : ?><?php endif; ?>
		<?}else if($category_number == 142){?>
		<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar4') ) : ?><?php endif; ?>
		<?}else{?>
		<?php if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('Sidebar') ) : ?><?php endif; ?>
		<?}?>

 위 코드를 보면 else if 부분에 각 카테고리 id가 들어가 있고 그 아래줄에 노출되어야하는 사이드바의 값들이 각각 들어가 있다.

그리고 else 부분에 그 외의 카테고리들은 'Sidebar'로 노출하라고 써있다.


마치며

위 내용들은 프로그래밍 언어의 '조건문'을 활용한 방식이다.

관련 지식을 습득하지 않은 사람은 많이 어려울 수도 있지만 PHP는 다른 언어들보다는 수정도 지식 습득도 빠른 편이니 조금 더 공부하면 스스로 워드프레스를 나만의 사이트로 커스터마이징 할 수 있다.

 

워드프레스는 커스터마이징이 제 맛!

Subscribe
Notify of
guest

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

2 댓글
Oldest
Newest
Inline Feedbacks
View all comments
U K
U K
9 years ago

다른글이지만 특정 페이지에서만

본문의 사이드바가 안뜨게 하는 소스입니다.
페이지 아이디를 원하는 페이지 번호로 수정후
테마 css 파일에 입력하면 특정 페이지에서만 사이드바가 없어집니다.

.page-id-3412 #sidebar {
display: none;
}

.page-id-3412 #main-content {
width: 960px;
}

.page-id-3412 #main-content .single-post {
width: 960px;
}

삭제하고 싶은 곳의 페이지 아이디 번호를 알아내서
.page-id-3412 에서 번호 부분을. 세줄다 바꿔서

이 코드를 워드프레스 테마 css 파일에 넣으면
그 아이디 번호의 사이드 바가. 사라집니다. 그리고 한페이지의 내용만
페이지상에 뜨게 됩니다. 영어로된곳에도 정확한 정보는 드물어서
엄청 고생해서 찾아서 공유하고자 올립니다

mynain
mynain
9 years ago
Reply to  U K

좋은 정보 공유해주셔서 대단히 감사합니다.

TOP