페이지를 사용해서 메뉴를 작성했고, 다음은 포스트의 카테고리를 사용해서 메뉴를 작성합니다. 기본 방법은 페이지와 큰 차이가 없습니다.

관리자에서 글 - 카테고리 로 이동하여 기존의 카테고리들을 모두 삭제합니다. 미분류는 삭제되지 않습니다.

 

 

 

카테고리로 "제품소개(슬러그: products)", "공지&뉴스(슬러그: notice-news)"를 추가합니다.

 

 

 

 

글 - 모든 글로 이동해서 포스트 01~03까지는 "제품소개" 카테고리로, 포스트 04~06까지는 "공지&뉴스" 카테고리로 설정합니다. 미분류에는 어떤 포스트도 설정하지 않습니다.

 

 

 

외모 - 메뉴로 이동하여 페이지와 카테고리 탭을 열어서 항목에 체크한 후 [메뉴에 추가]하여 메뉴를 설계한 후 메뉴를 저장합니다. 저장된 메뉴가 제대로 적용되었는지 확인합니다.

 

 

 

 

블로그 이미지

환타73

디지털 콘텐츠 제작 및 연구 & 개발. 온오프라인 강의.

,

워드프레스는 상대적으로 짧은 시간 , 저렴한 제작비용으로 홈페이지를 만들 수 있기 때문에 근래 주목을 받고 있습니다. 우선 테마를 사용해서 디자인을 쉽게 바꿀 수 있고, 플러그인을 사용해서 쉽게 기능을 추가할 수 있죠. 물론 깊게 들어가면 어렵습니다. 태생적인 한계도 있고요.(속도라던가 속도라던가 속도라던가...) 그대로 장점이 더 많은 것이 사실입니다.

 

이제 아래의 일반적인 홈페이지의 사이트맵을 구현하는 것을 목표로 할 것입니다.

 

-회사명 NyaOng (냐옹) 고양이 용품 제작회사-

홈 - 이미지 슬라이더, 공지&뉴스 3개, 제품 3개

회사소개 (page : company)

- 인사말 (page : greeting)

- 연혁 (page : history)

- 오시는길 (page : map : Google Map)

제품소개 (post-category : product)

- 주식 (post-category : food)

- 간식 (post-category : snack)

- 완구 (post-category : toy)

고객지원 (page : support)

- 공지&뉴스 (page : notice-news : KBoard )

- 문의사항 (page : question : KBoard)

- 콘텍트 (page : contact : Contact Form 7)

사이드바 - 카테고리, 태그, 댓글, 이미지 베너

푸터 - 월별 게시물, 카피라이트, 로그인

 

우선 테마 편집기에서 custom.css를 열어서 아래의 코드를 넣습니다. 사이트 제목과 설명의 태그라인의 폰트 크기를 수정해서 보기 좋게 하기 위해서 입니다. 사이트 타이틀은 그대로 둔 상태이고, 태그라인의 크기만을 0.8em(기본 폰트크기의 80%)로 설정하고, 행간을 1em(기본 폰트크기)로 설정 했습니다.

⁄*------------------------------------------------------------
 헤더수정
 *------------------------------------------------------------
 *⁄
.site-title {}
.site-description { font-size: 0.8em; line-height: 1em; }

 

 

 

관리자에서 <외모> - <사용자 정의하기> 를 선택하고 <사이트 제목과 태그라인>을 선택하여 적당한 내용을 입력하고 저장합니다.

- 사이트 제목 : NyaOng

- 태그라인 : 반려묘 용품 제작회사 냐옹닷컴

 

우측의 미리보기의 네비게이션 모양이 변한 이유는 홈페이지가 출력되는 영역의 가로크기가 줄어들었기 때문입니다.

저장 후 홈페이지로 들어가 보면 사이트 제목 부분의 내용이 변경된 것을 확인할 수 있습니다.

 

 

 

 

이제 페이지를 수정하고 메뉴도 수정해야 합니다.

먼저 회사소개, 인사말, 연혁, 오시는길 이라는 제목으로 페이지를 만듭니다. 이미 만들어 놓은 페이지를 수정해도 되는데 주의할 점은 내용을 수정하고 반드시 슬러그(slug)도 수정해야 한다는 것입니다. 그리고 슬러그는 되도록 "영문"으로 합니다.

- 회사소개 : company-info

- 인사말 : company-greeting

- 연혁 : company-history

- 오시는길 : company-map

슬러그를 따로 정해주는 이유는 한글주소가 있는 경우 인터넷 익스플로러에서 페이지를 못 찾는 버그가 있기 때문입니다. 여러가지 해결 방법이 있기는 하지만 100% 해결이 되는 것은 아니기 때문에 슬러그를 영문으로 만들어 주는 것이 가장 좋습니다.

페이지 편집 화면에서 슬러그 등의 메타박스가 없는 경우 우측 상단의 "화면옵션"을 열어서 체크하면 나타납니다.

 

 

 

 

 

인사말, 연혁, 오시는길 페이지의 상위 페이지를 회사소개로 설정하여 자식 페이지로 만듭니다. 그리고 페이지의 경우는 "댓글허용"의 체크를 풀어서 댓글을 달지 못하게 하는 편이 좋습니다.

 

 

 

 

그리고 각 페이지에 걸맞는 콘텐츠를 채운 후, 페이지로 메뉴를 만듭니다. 관리자에서 외모 - 메뉴로 이동하여 처음 계획한 순서대로 회사소개 메뉴를 만듭니다. 이 후 페이지로 메뉴를 만들어야 할 "고객지원(슬러그:support)", "콘텍트(슬러그:contect)"를 만들고 부모, 자식 설정을 합니다.

 

 

 

 

블로그 이미지

환타73

디지털 콘텐츠 제작 및 연구 & 개발. 온오프라인 강의.

,

_S 테마의 경우, 기본값으로 특성이미지(썸네일 이미지)를 사용하지 못하게 셋팅되어 있습니다.

테마 편집기에서 "functions.php"를 열어서 41행 근처에 아래의 소스가 있다면,

 

//add_theme_support( 'post-thumbnails' );

 

앞쪽의 // 를 삭제한 후 [Update File]을 클릭하여 저장합니다. 그리고 "글 - 새 글 쓰기" 나 "페이지 - 새 페이지 추가"에서  우측상단의 [화면옵션]을 열고 "특성 이미지"에 체크하면, 특성이미지를 넣을 수 있는 메타박스가 생성됩니다.

 

 

블로그 이미지

환타73

디지털 콘텐츠 제작 및 연구 & 개발. 온오프라인 강의.

,

홈 및 콘텐츠와 사이드바 에 부트스트랩 레이아웃을 적용하면서 알게 된 것을 간단히 정리하면

콘텐츠 부분의 요소는 <section id="primary" class="content-area span9"> 부분이고,

사이드바 부분의 요소는 <div id="secondary" class="widget-area span3" role="complementary"> 인 것을 알 수 있습니다.

 

즉 나머지 php 소스들을 살펴보고 같은 요소들이 있다면 위와 같이 적용하면 될 것입니다.

 

네비게이션에서 [카테고리2] 를 선택하면 "카테고리2"에 분류되어 있는 포스트들의 목록이 나타납니다. 이 카테고리 목록 부분을 출력하는 화일은 "archive.php" 파일인데 이 파일을 테마 편집기로 열어서 부트스트랩 레이아웃을 적용해 봅니다. 위와 같이 "span9"를 추가하면 포스트 목록 부분과 사이드바 부분의 레이아웃이 맞춰집니다.

마찬가지 방법으로 "search.php", "404.php" 파일도 열어서 클래스 "span9"를 추가합니다. 이 두개의 파일은 "검색결과"의 출력에 관련된 파일입니다.

 

 

 

블로그 이미지

환타73

디지털 콘텐츠 제작 및 연구 & 개발. 온오프라인 강의.

,

페이지 화면에 부트스트랩 레이아웃을 적용하는 것도 홈 화면에서 한 방법과 큰 차이가 없습니다. 단지 다른 점은 "사이드 바"가 있기 때문에 페이지와 사이드 바 두 개의 단으로 나뉘어진다는 것 뿐입니다. 두 개의 영역이 12개의 단에서 서로 어느만큼 차지하게 할 지는 개발자 마음이지만 여기서는 "span9"와 "span3"으로 나누겠습니다.

 

테마 편집기에서 "page.php"를 열고 아래와 같이 "span9"를 추가합니다.
<div id="primary" class="content-area span9">
[Update File]을 클릭해 저장합니다.

 

그리고 "sidebar.php"를 열고 아래와 같이 "span3"을 추가합니다.
<div id="secondary" class="widget-area span3" role="complementary">
[Update File]을 클릭해 저장합니다.

 

이제 홈페이지에서 메뉴 네비게이션의 샘플 페이지를 클릭해 적용된 모습을 확인해 봅니다.

 

 

댓글 남기기 아래쪽에 있는 "다음의 HTML 태그와 속성을 사용할 수 있습니다:"의 태그 속성이 가로로 사이드바까지 침범한 것을 고치기 위해 "custom.css"에 다음의 코드를 넣습니다.

⁄* 댓글 적용태크 줄바꿈 *⁄
code {
	white-space: normal;
}

 

 

 

포스트의 경우도 페이지와 같은 방법으로 레이아웃을 잡을 수 있습니다. 페이지와 다른 점은 단지 "single.php" 파일을 수정한다는 것 뿐입니다.

 

테마 편집기에서 "page.php"를 열고 아래와 같이 "span9"를 추가합니다.
<div id="primary" class="content-area span9">
[Update File]을 클릭해 저장합니다.

 

이제 홈 화면에서 포스트 06을 클릭해서 적용된 모습을 확인해 봅니다.

 

 

블로그 이미지

환타73

디지털 콘텐츠 제작 및 연구 & 개발. 온오프라인 강의.

,

대부분의 홈페이지에 jQuery 등으로 제작된 이미지 슬라이더가 들어가 있습니다. 홈페이지를 대표하거나 설명할 수 있는 멋진 이미지들을 볼 수 있고, 링크를 통해 해당 컨텐츠로 이동도 할 수 있습니다. 여러 뛰어난 성능의 무료 이미지 슬라이드 플러그인들이 있는데 여기서는 "Meta Slider"를 설치해 보겠습니다. 무료 버전으로도 일반적인 홈페이지라면 무리없이 사용할 수 있습니다.

 

Meta Slider

http://wordpress.org/plugins/ml-slider/

 

슬라이더를 설치하고 활성화 한 후 관리자 페이지 아래쪽에 보면 Meta Slider 메뉴가 생긴 것을 확인할 수 있습니다. [+] 버튼을 클릭하여 새로운 슬라이드쇼를 추가하고, 이름을 Home Slider 로 합니다. 그리고 [Add Slide] 버튼을 클릭하여 이미지를 업로드하거나 불러옵니다.

 

 

 

 

 

 

슬라이더용 이미지를 하나하나 추가하고, 우측의 셋팅에서 "Nivo Slider"를 선택하고 Width, Height 값을 지워서 빈칸으로 만듭니다. 빈칸으로 만들면 자동으로 화면에 꽉 채워서 보여줍니다. 
참고로 슬라이더에 등록할 이미지의 가로:세로 비율은 가로는 길고 세로는 짧게. 즉, 와이드(wide)한 비율이 보기 좋습니다. 저는 2.35:1(영화 스크린 비율)로 했습니다. 
모든 설정을 다 마치면 [Save] 버튼을 클릭하고 하단에 있는 Usage 항목에서 Template Include 탭을 클릭하여 아래에 생성되는 php 코드를 복사합니다.

 

 

 

 

테마 편집기에서 "home.php"를 열고 <section class="row"> 위에 다음의 코드를 넣고 저장합니다.

      <div class="imageslider">
        <?php echo do_shortcode("[metaslider id=38]"); ?>
      <⁄div><!-- .imageslider -->

 

 

홈페이지를 확인하면 3열 2행의 최근 포스트 위에 이미지 슬라이더가 동작하는 것을 볼 수 있습니다.

 

 

블로그 이미지

환타73

디지털 콘텐츠 제작 및 연구 & 개발. 온오프라인 강의.

,

header.php 즉, 헤더 부분에 부트스트랩 레이아웃을 적용한 후 다음으로는 "홈" 부분에 레이아웃을 적용해야 합니다.
그냥 쭉 나열되어 있는 콘텐츠들을 (여기서는 최근 포스트 6개) 3열 2행으로 나열하는 것을 목표로 합니다.

 

 

 

우선 윈도우 탐색기를 통해 aca 테마 파일 중 "index.php"를 선택하고 [ctrl+c] 후 [ctrl+v]로 사본을 만듭니다. 그리고 사본의 이름을 "home.php"로 바꾼 후 FTP 나 테마 에디터를 통해 웹서버에 업로드 합니다.

이제 워드프레스는 "홈"을 불러올 때 "home.php"를 불러올 것입니다(워드프레스의 php 파일 로딩 순서에서 home.php가 index.php 보다 먼저 불러오게 되어 있습니다).

 

 

 

 

홈 화면에서는 사이드바를 삭제할 것이므로, "home.php" 소스에서 사이드바 관련 코드를 삭제해야 합니다.
<?php get_sidebar(); ?> 를 삭제하면 페이지 하단에 있던 사이드바가 사라집니다.

 

 

 

 

 

 

 

"header.php" 맨 아래 줄에서 클래스에 "row"를 추가했기 때문에 "home.php" 소스에서는 "span" 클래스를 추가합니다.

id가 primary 인 div 요소의 클래스명 content-area 뒤에 span12 를 추가합니다. 포트스 내용이 브라우저의 가운데로 제대로 정열이 되면서 마진이 생깁니다.

 

<div id="primary" class="content-area span12">

 

 

이제 포스트들을 3열 2행으로 만들어야 합니다. home.php 소스에 보면 워드프레스의 루프(Loop) 소스가 있습니다. 이 부분을 수정해서 구현합니다.

 

<?php if ( have_posts() ) : ?> 부터 <?php endif; ?> 까지의 내용을 아래와 같이 수정합니다.

			<section class="row">
					<?php $post_count = 1; ⁄⁄카운터 ?>
					<?php if ( have_posts() ) : ?>

					<?php ⁄* Start the Loop *⁄ ?>
					<?php while ( have_posts() ) : the_post(); ?>

					<?php
						⁄* Include the Post-Format-specific template for the content.
						 * If you want to override this in a child theme, then include a file
						 * called content-___.php (where ___ is the Post Format name) and that will be used instead.
						 *⁄
						echo('<div class="span4">');
							get_template_part( 'content', get_post_format() );
						echo('<⁄div>');
					?>

					<?php if ($post_count % 3 == 0) { echo '<div class="clear"><⁄div>'; } ?>
					<?php $post_count++; endwhile; ?>

					<?php aca_paging_nav(); ?>

					<?php else : ?>

					<?php get_template_part( 'content', 'none' ); ?>

					<?php endif; ?>
			<⁄section><!-- .row -->

 

3열 2행의 레이아웃으로 변경되었습니다.
루프 소스 중에 카운터를 넣은 것은 3열마다 css의 클리어 요소(clear: both)를 넣어서 줄바꿈을 해 주어야 하기 때문입니다. 클리어 요소를 넣지 않으면 포스트의 내용에 따라 줄바꿈이 뒤죽박죽 되어 버립니다.
만일 3열이 아닌 4열로 포스트로 나열하고 싶다면 {span4} 대신에 {span3}을 넣고,{$post_count % 3} 을 {$post_count % 4}로 수정하면 됩니다.

 

 

포스트의 내용이 제각각이라서 좀 들쭉날쭉 합니다. 입력된 내용이 전부 보여지게 되어 있기 때문인데 이를 해결하기 위해 플러그인을 설치합니다.

 

Auto Excerpt everywhere
http://wordpress.org/plugins/auto-excerpt-everywhere/

 

이 플러그인은 포스트의 내용을 요약하여 출력하는 기능을 가지고 있습니다. 플러그인을 설치한 후 Excerpt length 값을 300 으로, Read more text 에 들어갈 문구를 ...more 로 설정했습니다. 출력되는 내용이 일정하게 잘려서 깔끔하게 정리된 모습을 볼 수 있습니다.

 

 

 

블로그 이미지

환타73

디지털 콘텐츠 제작 및 연구 & 개발. 온오프라인 강의.

,

헤더부분의 기본적인 작업을 마치고 본격적인 콘텐츠 부분의 레이아웃 작업에 들어가기 전에 우선 임시 데이터를 입력합니다. 뭐라도 내용이 있어야 디자인 작업을 할 때 모양이 그럴듯하게 나오기 때문입니다. 내용없이 텅텅 빈 홈페이지 만큼 없어 보이는 것도 없으니까요.
이런 임시 내용을 "더미 데이타(Dummy Data)"라고도 하고 워드프레스 플러그인으로도 개발되어 있습니다만 여기서는 그냥 입력하도록 하겠습니다. 대신 한글 "lorem ipsum"을 사용하여 글 내용은 입력하는 편이 수월하겠군요.
(lorem ipsum : 테스트용으로 쓰이는 더미 텍스트. 디자인을 할 때, 레이아웃을 테스트할 때, 프린트 테스트, 기계 테스트, 폰트 테스트, 컨텐츠의 양을 측정할 때 등에 사용됩니다.)

한글 lorem ipsum
http://guny.kr/stuff/klorem/

위의 사이트를 통해 무작위 텍스트를 만들어서 페이지 3개, 글 6개를 작성합니다. 특성이미지는 아직 넣을 수 없습니다.

 

이 콘텐츠를 기반으로 메뉴를 작성합니다.
관리자에서 외모 - 메뉴 로 이동하여, 아래와 같은 2단계 깊이의 메뉴를 만들고 메뉴명을 Menu 1 로 저장합니다.

 

블로그 이미지

환타73

디지털 콘텐츠 제작 및 연구 & 개발. 온오프라인 강의.

,

부트스트랩 레이아웃을 위해 원래의 요소에 클래스를 추가해보도록 하겠습니다.

먼저 테마 에디터에서 header.php를 선택하여 엽니다. 내용중 body 요소 아래쪽을 수정하여 부트스트랩을 적용해 보겠습니다.

header.php

<div id="page" class="hfeed site">

	<header id="masthead" class="site-header" role="banner">
		<div class="site-branding">
			<h1 class="site-title"><a href="<?php echo esc_url( home_url( '⁄' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?><⁄a><⁄h1>
			<h2 class="site-description"><?php bloginfo( 'description' ); ?><⁄h2>
		<⁄div>

		<nav id="site-navigation" class="main-navigation" role="navigation">
			<h1 class="menu-toggle"><?php _e( 'Menu', 'aca' ); ?><⁄h1>
			<a class="skip-link screen-reader-text" href="#content"><?php _e( 'Skip to content', 'aca' ); ?><⁄a>

			<?php wp_nav_menu( array( 'theme_location' => 'primary' ) ); ?>
		<⁄nav><!-- #site-navigation -->
	<⁄header><!-- #masthead -->

	<div id="content" class="site-content">

 

이제 여기에 클래스 요소를 추가해야 합니다. 우선 맨 위의 id가 page 인 div 요소가 있는데 이것이 홈페이지 전체를 감싸고 있는 요소 입니다. 여기 클래스에 "container"를 추가합니다.

그리고 아래쪽에 보면 id가 masthead 인 header 요소가 있습니다. header 요소는 사이트명, 사이트 설명, 네비게이션을 포함하고 있는 하나의 가로'행'을 구성하고 있습니다. 그렇기 때문에 클래스명에 "row"를 추가합니다.

header 요소 내부에 있는 div 요소는 사이트명, 사이트 설명을 포함하고 있으며 부트스트렙 레이아웃의 12행을 모두 포함합니다. 그래서 클래스명 site-branding 뒤에 "span12"를 추가합니다.

nav 요소는 메인 네비게이션으로 이 역시 12행을 모두 포함합니다. 클래스명 main-navigation 뒤에 "span12"를 추가합니다.

그리고 마지막 행의 id가 content인 div 요소는 헤더 아래쪽에서 푸터 위까지의 메인 콘텐츠 부분을 감싸고 있으므로 클래스명 site-content 뒤에 "row"를 추가합니다.

<div id="page" class="hfeed site container">
 
    <header id="masthead" class="site-header row" role="banner">
        <div class="site-branding span12">
            <h1 class="site-title"><a href="<?php echo esc_url( home_url( '⁄' ) ); ?>" rel="home"><?php bloginfo( 'name' ); ?><⁄a><⁄h1>
            <h2 class="site-description"><?php bloginfo( 'description' ); ?><⁄h2>
        <⁄div><!-- .site-branding .span12 -->
 
        <nav id="site-navigation" class="main-navigation span12" role="navigation">
            <h1 class="menu-toggle"><?php _e( 'Menu', 'aca' ); ?><⁄h1>
            <a class="skip-link screen-reader-text" href="#content"><?php _e( 'Skip to content', 'aca' ); ?><⁄a>
 
            <?php wp_nav_menu( array( 'theme_location' => 'primary' ) ); ?>
        <⁄nav><!-- #site-navigation .span12 -->
    <⁄header><!-- #masthead .row -->
 
    <div id="content" class="site-content row">

 

헤더의 레이아웃을 간단히 아래의 그림으로 표현할 수 있습니다.

 

헤더의 레이아웃은 잡아놓았지만 아직 네비게이션 부분의 셋팅이 남아있습니다. 부트스트랩은 고유의 반응형 네비게이션 바를 제공하고 있으며 화면의 가로 사이즈에 따라 모양이 변합니다.
부트스트랩 네비게이션 바를 사용하기 위해서는 우선 "header.php" nav 요소 부분을 아래와 같이 수정합니다.

<nav id="access" class="navbar span12" role="navigation">
			<div class="navbar">
				<div class="navbar-inner">
				<!-- 화면폭 줄어들면 메뉴 사라지고 토글버튼 생김-->
					<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
					<span class="icon-bar"><⁄span>
					<span class="icon-bar"><⁄span>
					<span class="icon-bar"><⁄span>
					<⁄a>
					<div class="nav-collapse">
						<!-- 네비게이션 메뉴 시작 -->
						<?php wp_nav_menu( array( 'theme_location' => 'primary', 'walker' => new bootstrapwp_walker_nav_menu(), 'menu' => 'main-menu', 'menu_class' => 'nav', 'menu_id' => 'main-menu' ) ); ?>
						<!-- 네비게이션 메뉴 끝 -->
					<⁄div><!--.nav-collapse-->
				<⁄div><!--.navbar-inner-->
			<⁄div><!-- .navbar -->
		<⁄nav><!-- #access .navbar .span12-->

 

그리고 "functions.php" 파일을 열어 내용 가장 아래에 다음의 코드를 추가해 넣습니다. 이 코드는 워드프레스의 메뉴를 부트스트랩 메뉴로 변환시키는 (부트스트랩의 네비게이션 바를 워드프레스 _S 테마의 기본 메뉴 출력에 적용시키는) 함수입니다.

⁄* 
 * 부트스트랩 메뉴화
 *⁄

function register_my_menus() {
	register_nav_menus(
		array(
			'header-menu' => __('Header Menu'),
			'extra-menu' => __('Extra Menu')
			)
		);
}
add_action('init', 'register_my_menus');
add_theme_support('menus');

⁄⁄

class bootstrapwp_walker_nav_menu extends Walker_Nav_Menu {


  function start_lvl( &$output, $depth ) {

    ⁄⁄In a child UL, add the 'dropdown-menu' class
    $indent = str_repeat( "\t", $depth );
    $output    .= "\n$indent<ul class=\"dropdown-menu\">\n";

  }

  function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {

    $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';

    $li_attributes = '';
    $class_names = $value = '';

    $classes = empty( $item->classes ) ? array() : (array) $item->classes;

    ⁄⁄Add class and attribute to LI element that contains a submenu UL.
    if ($args->has_children){
      $classes[]    = 'dropdown';
      $li_attributes .= 'data-dropdown="dropdown"';
    }
    $classes[] = 'menu-item-' . $item->ID;
    ⁄⁄If we are on the current page, add the active class to that menu item.
    $classes[] = ($item->current) ? 'active' : '';

    ⁄⁄Make sure you still add all of the WordPress classes.
    $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item, $args ) );
    $class_names = ' class="' . esc_attr( $class_names ) . '"';

    $id = apply_filters( 'nav_menu_item_id', 'menu-item-'. $item->ID, $item, $args );
    $id = strlen( $id ) ? ' id="' . esc_attr( $id ) . '"' : '';

    $output .= $indent . '<li' . $id . $value . $class_names . $li_attributes . '>';

    ⁄⁄Add attributes to link element.
    $attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) .'"' : '';
    $attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target     ) .'"' : '';
    $attributes .= ! empty( $item->xfn ) ? ' rel="'    . esc_attr( $item->xfn        ) .'"' : '';
    $attributes .= ! empty( $item->url ) ? ' href="'   . esc_attr( $item->url        ) .'"' : '';
    $attributes .= ($args->has_children) ? ' class="dropdown-toggle" data-toggle="dropdown"' : ''; 

    $item_output = $args->before;
    $item_output .= '<a'. $attributes .'>';
    $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after;
    $item_output .= ($args->has_children) ? ' <b class="caret"><⁄b> ' : ''; 
    $item_output .= '<⁄a>';
    $item_output .= $args->after;

    $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
  }

  ⁄⁄Overwrite display_element function to add has_children attribute. Not needed in >= Wordpress 3.4
  function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ) {

    if ( !$element )
      return;

    $id_field = $this->db_fields['id'];

    ⁄⁄display this element
    if ( is_array( $args[0] ) ) 
      $args[0]['has_children'] = ! empty( $children_elements[$element->$id_field] );
    else if ( is_object( $args[0] ) ) 
      $args[0]->has_children = ! empty( $children_elements[$element->$id_field] ); 
    $cb_args = array_merge( array(&$output, $element, $depth), $args);
    call_user_func_array(array(&$this, 'start_el'), $cb_args);

    $id = $element->$id_field;

    ⁄⁄ descend only when the depth is right and there are childrens for this element
    if ( ($max_depth == 0 || $max_depth > $depth+1 ) && isset( $children_elements[$id]) ) {

      foreach( $children_elements[ $id ] as $child ){

        if ( !isset($newlevel) ) {
          $newlevel = true;
          ⁄⁄start the child delimiter
          $cb_args = array_merge( array(&$output, $depth), $args);
          call_user_func_array(array(&$this, 'start_lvl'), $cb_args);
        }
        $this->display_element( $child, $children_elements, $max_depth, $depth + 1, $args, $output );
      }
        unset( $children_elements[ $id ] );
    }

    if ( isset($newlevel) && $newlevel ){
      ⁄⁄end the child delimiter
      $cb_args = array_merge( array(&$output, $depth), $args);
      call_user_func_array(array(&$this, 'end_lvl'), $cb_args);
    }

    ⁄⁄end this element
    $cb_args = array_merge( array(&$output, $element, $depth), $args);
    call_user_func_array(array(&$this, 'end_el'), $cb_args);

  }

}

 

마지막으로 "custom.css" 스타일시트 파일을 열어서 다음의 스타일을 추가합니다. 이것은 부트스트랩 네비게이션 메뉴가 브라우저 가로크기가 일정 크기 이하로 줄었을 경우 네비게이션이 드롭다운 방식 바뀔 때 제대로 동작하지 않는 경우를 약간 수정해 줍니다. 그래도 약간의 버그는 있는데 메뉴를 한 번 폈다가 접은 후 다시 펴야지 제대로 동작합니다(아직 완벽한 수정방법은 찾지 못했네요).

⁄* 부트스트랩 드롭다운 패치 *⁄
.dropdown-backdrop {
	position: static;
}

 

<부트스트랩 적용 php소스 : 워드프레스 완벽입문 참조>

 

블로그 이미지

환타73

디지털 콘텐츠 제작 및 연구 & 개발. 온오프라인 강의.

,

부트스트랩으로 레이아웃을 잡기 위해서는 코딩의 기본구조를 먼저 알아야 합니다. 부트스트랩의 레이아웃 구조를 위해서 알아야 할 것은 사실 몇가지 없기 때문에 익히기 어렵지 않습니다. 부트스트랩 홈페이지에서 Scaffolding 부분에서 이를 확인할 수 있습니다.

레이아웃 코딩을 위한 css 클래스(class) "container", "row", "span", "offset"의 뜻을 알아보겠습니다.

container 는 레이아웃 구성하는 가장 큰 부분으로 아래의 레이아웃에서 가장 외각선이라고 보면 이해가 쉽습니다. 일반적으로 홈페이지 소스에서 한 번 사용하는 경우가 대부분입니다.


<div class="container">
네비게이션



이미지 슬라이더

최근 포스트




최근 포스트


최근 포스트


하단 푸터 & 카피라이트
</div>

 

row 는 레이아웃 구성에서 가로 '열'을 뜻합니다. 아래에서 "네비게이션", "이미지 슬라이더", " 최근포스트 3개", "하단 푸터 & 카피라이트" 부분이 각각의 row '열'을 구성합니다.


<div class="container">
<div class="row">네비게이션</div>



<div class="row">이미지 슬라이더</div>

<div class="row">최근 포스트




최근 포스트


최근 포스트</div>


<div class="row">하단 푸터 & 카피라이트</div>
</div>

 

span은 세로 '행(column)'을 뜻합니다. 다른 말로 '단'이라고도 말할 수 있습니다.
부트스트랩은 전체적으로 12열을 지원하고, 일반적으로 1단, 2단, 3단, 4단 정도로 레이아웃으로 설계합니다. 아래에서 "네비게이션", "이미지 슬라이더", "하단 푸터 & 카피라이트" 부분은 1단 구성, "최근 포스트" 부분은 3단 구성입니다.

span1 부터 span12까지가 있으며,
1단 구성을 위해서는 span12 (12행을 모두 사용 : 12행*1단=12행),
2단 구성은 span6 (6행을 사용 : 6행*2단=12행),
3단 구성은 span4 (4행을 사용 : 4행*3단=12행),
4단 구성은 span3 (3행을 사용 : 3행*4단=12행) 입니다.


<div class="container">
<div class="row"><div class="span12">네비게이션</div></div>



<div class="row"><div class="span12">이미지 슬라이더</div></div>

<div class="row">
<div class="span4">
최근 포스트
</div>




<div class="span4">
최근 포스트</div>



<div class="span4">
최근 포스트</div>
</div>


<div class="row"><div class="span12">하단 푸터 & 카피라이트</div></div>
</div>

 

offset은 span 클래스 뒤에 위치하여 함께 쓰이면서 '들여쓰기'처럼 빈 열을 추가합니다.


<div class="container">
<div class="row"><div class="span12">네비게이션</div></div>



<div class="row"><div class="span12">이미지 슬라이더</div></div>

<div class="row">
{빈 공간}




<div class="span4 offset4">
최근 포스트</div>



<div class="span4">
최근 포스트</div>
</div>


<div class="row"><div class="span12">하단 푸터 & 카피라이트</div></div>
</div>

 

이들 클래스를 스타일 요소에 클래스로 지정하여 레이아웃을 설계할 수 있습니다.

 

블로그 이미지

환타73

디지털 콘텐츠 제작 및 연구 & 개발. 온오프라인 강의.

,

부트스트랩을 테마 디렉토리에 업로드를 했다고 그냥 적용 되는 것이 아니기 때문에 부트스트랩을 등록해 주는 과정이 필요합니다. 부트스트랩이 설치된 디렉토리 및 css 파일, js 파일 등을 테마의 함수 파일에 넣어야 합니다.

테마의 함수는 기본적으로 테마 루트 디렉토리에 있는 "functions.php" 에서 정의, 등록합니다.
이는 어디까지나 기본값이 그렇다는 것이고 테마마다 조금씩 달리할 수도 있는데 상용 테마의 경우 functions.php 를 일종의 다른 함수 파일을 불러오는 역할만 맡겨버리고 실제의 함수들은 용도별로 여러 파일로 나눠 프로그래밍하는 경우가 많습니다.

여기서는 직접 functions.php 가장 아래에 부트스트랩을 불러오는 코드를 넣겠습니다.

<소스내용>

 
/*---------------------------------------------------------------------
 * 커스터마이징
 *---------------------------------------------------------------------
 */

/* 
 * 부트스트랩 등록 & 커스텀 스타일 시트 등록
 */

function aca_styles() {
	wp_enqueue_style('bootstrap-stylesheet', get_stylesheet_directory_uri() . '/css/bootstrap.css');
	wp_enqueue_script('bootstrap-script', get_stylesheet_directory_uri() . '/js/bootstrap.js', array('jquery'));
	wp_enqueue_style('custom-stylesheet', get_stylesheet_directory_uri() . '/custom.css');
}
add_action('wp_enqueue_scripts', 'aca_styles');

 

위의 소스를 functions.php 에 넣게 되면 부트스트랩을 위한 스타일시트와 자바스크립트 그리고 사용자 정의 스타일시트를 테마에 적용한다는 뜻입니다.

탐색기에서 마우스 오른쪽 버튼을 클릭하여 <새로 만들기> - <텍스트 문서>를 선택합니다. 그리고 만들어진 파일의 이름을 "custom.css"로 변경하고 이를 FTP를 사용하거나 Theme Editor 를 사용하여 테마의 루트 디렉토리에 업로드합니다.

 

 

위의 과정을 통해 부트스트랩의 스타일시트가 aca 테마에 적용되었습니다.

 

이전과 별 차이가 없군요. 우선 적용이 제대로 되었는지 사용자 정의 스타일시트를 수정해 보겠습니다.
테마 에디터에서 custom.css 파일을 클릭하고, 편집창에 구글 폰트 라이브러리에서 나눔고딕 폰트를 불러오는 코드를 넣습니다.

<소스내용>

/* 나눔폰트 */
@import url(http://fonts.googleapis.com/earlyaccess/nanumgothic.css);

/* 나눔폰트적용 */
body {
	font-family: 'Nanum Gothic','Dotum';
}

 

나눔고딕 폰트가 적용된 것으로 추가한 코드가 제대로 동작하고 있는 것을 확인할 수 있습니다.  

 

블로그 이미지

환타73

디지털 콘텐츠 제작 및 연구 & 개발. 온오프라인 강의.

,

_S로 만들어진 aca 테마를 워드프레스에서 등록을 하고 활성화 합니다. 그리고 화면 좌측 상단의 [홈 아이콘을]을 [ctrl+ 클릭]하여 새 탭에서 페이지를 열어보면 아무런 디자인도 입혀지지 않은 정말 깨끗한 화면이 출력됩니다. 왜냐하면 아직 레이아웃에 맞춰서 정렬이 되어있지 않기 때문입니다. 거기에다가 내용도 입력된 것이 없고, 메뉴도 정해지지 않았고... 등등 아직 갈 길이 멉니다.

_S 테마 기본 모양_S 테마 기본 모양

 

이제 레이아웃을 설계해야 합니다. 우선은 첫페이지를 디자인 하는데, 심플하게 사이드바는 없이 그냥 상단 네비게이션, 중단 최근포스트, 하단 푸터 & 카피라이트 를 세로로 쭈욱 나열하는 모양으로 하겠습니다. 그리고 상단 네비게이션과 중단 최근 포스트 사이에 이미지 슬라이더를 넣을 것입니다.


네비게이션



이미지 슬라이더

최근 포스트




최근 포스트


최근 포스트


하단 푸터 & 카피라이트

워드프레스 홈페이지의 가장 큰 장점 중에 하나로 소개되어지는 것이 무엇일까요?
바로 "반응형(Responsive) 홈페이지"라는 것입니다. 반응형 홈페이지가 뭐지? 라는 분...은 설마 없으시겠죠.
바로 컴퓨터 모니터, 스마트 폰, 스마트 패드 등의 여러 기기 및 화면을 체크해서 가장 컨텐츠를 보기 편한 형태로 레이아웃을 재정렬 하는 기능입니다. 정확하게는 워드프레스가 지원한다기 보다 HTML5와 CSS3 등을 사용하여 미디어 쿼리를 적용하여 코딩된 "테마"가 이 기능을 구현하는 것이죠. 몇 년전까지만 해도 "반응형"이라는 말 조차 없었습니다.

반응형 레이아웃반응형 레이아웃

 

_S로 aca 테마를 반응형으로 만들기 위해서는 마찬가지로 일일이 직접 미디어 쿼리를 작성하고 코딩을 해야 하는데 이 일이 상당한 시간과 노력을 필요로 합니다. 그렇기 때문에 웹개발자들은 빠르고 편한 개발을 위해서 어떤 틀을 만들어 내었고, 그 중 가장 대표적인 것이 바로 부트스트랩(Bootstrap) 입니다.
부트스트랩은 트위터의 웹개발자들이 만들었고, 전 세계적으로 많이 사용되고 있습니다. 이런 일련의 개발틀을 "프레임워크(Framework)"라고 합니다. 이 프레임 워크를 사용해서 반응형 테마를 구현할 수 있습니다.

부트스트랩 홈페이지에서 부트스트랩 2.3.2 버전을 다운 받습니다.
http://getbootstrap.com/2.3.2/

부트스트랩 2.3.2부트스트랩 2.3.2

 

최신 버전은 3.1.1 인데 (2014년 4월 기준) 왜 구버전을 사용하냐면 최신버전은 모바일 홈페이지 제작 쪽에 좀 더 특화되어 있기 때문입니다.
(라기 보단 2.3.2 버전 보다 사용이 좀 복잡해져서...랄까요;;;)

그냥 [Download Bootstrap]을 클릭해도 되고, 상단의 Costomize 항목을 통해서 여러 옵션을 수정해서 다운로드 해도 됩니다. 여기서는 기본값으로 그냥 받을 것이므로 2.3.2 메인페이지에서 다운로드 받습니다.

"bootstrap.zip" 파일이 다운로드 되면 적당한 곳에 압축을 풉니다. css, img, js 세 개의 폴더와 내부의 파일들이 생성되는데 이들을 FTP를 사용해 테마가 설치된 곳에 업로드 합니다.

부트스트랩 파일부트스트랩 파일

관리자에서 외모 - Theme Editor 로 들어가서 확인해보면 몇 개의 디렉토리가 새로 생성된 것을 볼 수 있습니다.
주의할 점은 워드프레스 기본 편집기에서는 제대로 확인이 되지 않기 때문에 편집 플러그인 WP Editor 를 먼저 설치해야 합니다. 워드프레스로 홈페이지 제작을 하기 위해서 꼭 필요한 플러그인 입니다.

WP Editor
http://wordpress.org/plugins/wp-editor/

WP Editor가 설치되어 있다면 테마를 구성하고 있는 파일들과 디렉토리들을 볼 수 있고, 간단하게 나마 파일도 업로드 할 수 있습니다. 파일 업로드 기능은 테마의 루트 및 서브 디렉토리에 새로 파일을 올리는 정도의 기능만 지원합니다. 아쉽게도 덮어쓰기는 지원하지 않습니다.

 


블로그 이미지

환타73

디지털 콘텐츠 제작 및 연구 & 개발. 온오프라인 강의.

,