페이지 화면에 부트스트랩 레이아웃을 적용하는 것도 홈 화면에서 한 방법과 큰 차이가 없습니다. 단지 다른 점은 "사이드 바"가 있기 때문에 페이지와 사이드 바 두 개의 단으로 나뉘어진다는 것 뿐입니다. 두 개의 영역이 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

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

,

워드프레스는 설치 후 테마 적용만으로 홈페이지를 만들 수 있습니다. 물론 그 이후의 작업이 더 어려워지기도 하지만 적용한 테마의 디자인 및 기능을 벗어나지 않고 그대로만 사용한다면 이만큼 쉬운 홈페이지 제작법은 없으리라고 생각됩니다(덕분에 홈페이지 제작을 더 우습게 보고 제작가격을 후려치려는 싸장님들도 많아진 것도 사실입니다. 그럴때면 그냥 "그냥 직접 공부해서 만드세요~" 라고 말해주고 싶습니다).

그런데 이 워드프레스라는 것이 외쿡 것이라 국내의 실정(?) 또는 일반인들이 생각하는 홈페이지와는 서로 괴리가 있는 경우가 많은 편인데, 아마 큰 이유가 디자인 스타일도 국내의 그것과는 좀 다른 편이고 큼직큼직한 그리드 기반의 레이아웃은 아기자기하고 꽉꽉 채워져있는 듯한 국내의 웹디자인과는 좀 달라서가 아닌가 싶습니다.
그나마 요즘의 세계화 기조 덕분일까... 몇몇 큰 기업의 이벤트 홈페이지, 블로그, 관공서 홈페이지 등의 디자인들이 그리드 기반 레이아웃으로 조금씩 바뀌어져 가고는 있는 상황이라서 이 부분은 나아지고 있는 편입니다.

어쨌든 워드프레스로 홈페이지 제작을 할 때 '이미 만들어져 있는 테마'를 사용하지 않는다면 결국 직접 만들어야 합니다.
워드프레스 관련 서적을 보신 분들은 알겠지만 style.css와 index.php 두 개의 파일이 테마를 만드는 최소한의 구성요소이고 이 외에도 codex.wordpress.org 를 참조하여 필요한 파일들을 만들어가야 하는 것... 등등 생각할 것도 많고 할 일도 많습니다.

그런데 친절하게도 워드프레스 측에서 일종의 테마 제작틀을 제공하고 있습니다. 보통 "스타터(starter) 테마"라고도 하는데 힘들고 귀찮은 테마 파일 제작과정을 건너 뛸 수 있게 해 주고 또한 프로그램에 대한 지식이 많이 없는 웹디자이너 또는 퍼블리셔도 워드프레스를 사용한 간단한 홈페이지를 직접 만들 수 있게 해 줍니다. 즉, 스타터 테마를 사용하면 (어느정도)자신만의 테마를 만들 수 있다는 것입니다.

"_S" 언더스코어스(underscoreS)를 다운 받습니다.
http://underscores.me/

underscores스타터테마 언더스코어스

페이지에 입력란이 있는데 적당한 이름을 넣습니다. 너무 길게 넣으면 나중에 소스 수정할 때 번거로우니까 영문자 2~3자로 하는 것이 편합니다. 본인은 "aca" 로 했습니다. 이 문자는 이제 만들어질 테마의 이름이기도 하고, 내부 소스의 함수(function)명 앞에 접두어처럼 붙게 됩니다. 예를 들면 "aca_functionname" 이런 식으로 함수명이 만들어집니다.

우측의 [Generate] 버튼을 클릭하면 사용자의 컴퓨터로 압축파일 하나가 다운로드 됩니다. 저의 경우는 "aca.zip" 파일이 다운로드 되었습니다. 이제 이 파일을 적당한 곳에다 압축을 풀면 테마 파일들이 생긴 것을 확인할 수 있습니다. 이 파일들이 워드프레스에서 제공하는 기본 테마의 동작 파일들이라고 봐도 과언은 아닐 것입니다...(라고 생각합니다). 

테마 압축 파일_S 테마 압축 파일

 

이 테마 파일을 워드프레스 관리자에서 테마로 등록합니다. 외모 - 테마 - 새로 추가 (또는 새 테마 추가하기)를 통해서 할 수 있습니다. 테마가 설치되면 테마 리스트에 새로 등록된 테마가 보일 것입니다. 이미지 부분이 없는 것은 screenshot.png 파일이 아무런 내용이 없는 투명한 png 파일이기 때문입니다.

워드프레스 테마 화면워드프레스 테마 화면

테마 설치테마 파일 업로드 설치

_S 테마 등록등록된 _S 테마

 

컴퓨터에 저장되어 있는 테마 파일의 압축을 풀고 생성된 파일들 중에서 screenshot.png 파일을 포토샵 등의 이미지 프로그램을 사용하여 수정한 후 FTP 프로그램을 사용하여 테마폴더에 업로드 합니다.
제가 사용하는 카페24의 경우 
/home/hosting_users/호스팅유저명/www/워드프레스설치디렉토리/wp-content/themes/aca
에 aca 테마가 설치된 상태입니다.

_S 테마 압축 풀기_S 테마 압축 풀기

테마 썸네일 파일테마 썸네일 이미지 screenshot.png

썸네일 제작썸네일 제작 및 저장

 

관리자 - 외모 - 테마 페이지를 보면 비어있던 aca 테마의 이미지가 수정된 이미지로 바뀐 것을 확인 할 수 있습니다. 이제 aca 테마를 활성화 시켜 봅니다.

썸네일 등록 확인_S 테마 썸네일 등록 확인

테마 활성화_S 테마 활성화

 


블로그 이미지

환타73

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

,

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

워드프레스에서 포스트를 페이지에 미리보기 또는 리스트로 출력할 때에는 기본값이 전체 내용 모두가 출력되게 되어 있습니다. 이를 정해진 글자수 만큼만 출력하는 기능을 가지고 있는 플러그인입니다.

자를 글자 수, 더보기 텍스트 수정, 더보기 용 이미지 지정, 섬네일 사용여부, 섬네일 정렬 및 커스텀 클래스 지정 기능 등의 기능이 있고 특별히 설정이 어렵지 않습니다.
한 가지 단점은 더보기 텍스트가 요약글 바로 다음에 오게 되어 있어서 정렬이 힘들다는 것인데... 플러그인 소스 수정으로 가능하겠네요.

첨부파일은 한글화한 것입이다. 플러그인을 설치 후 압축을 풀어서 나오는 option.php 를 덮어씌우면 됩니다.

options_ko-kr.zip



'워드프레스 > 테마 & 플러그인' 카테고리의 다른 글

Meta Slider  (0) 2014.05.05
Inovado  (0) 2014.05.05
Easy Fancybox (한글 언어 파일 추가)  (0) 2014.04.15
Lens  (0) 2014.04.11
Egofolio  (0) 2014.04.03
블로그 이미지

환타73

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

,

인터뷰코리아 홈페이지 인터뷰코리아 홈페이지 서브

워드프레스로 홈페이지를 만들 때 제일 먼저 할 일이 테마 선정인데, 보통은 클라이언트에게 원하는 홈페이지의 디자인(스타일) 및 기능 등에 대한 이야기를 듣고 몇개의 테마를 추천한 후 그 중에서 선택하게 하거나, 원하는 테마를 직접 테마포레스트에서 선택하게 합니다. 물론 테마 포레스트에 대한 사용 설명이 좀 필요하고...

INTV - interviewkorea.com 제작에서는 이미 워드프레스에 대한 설명을 들었던 상태로 직접 테마를 선택한 경우로 특히 대표가 소규모 간이 스튜디오를 직접 꾸밀 정도로 사진촬영에 관심이 많았기 때문에 직접 선택을 하게 하는 것이 서로간에 만족도가 높으리라고 생각 했습니다.

Lens 테마는 '좌측 네비게이션' 방식의 "포트폴리오형 테마"로 어두운 회색톤을 기본으로 하나의 메인컬러를 지정하여 포인트를 주는 형태의 디자인을 취하고 있으며, 이 메인컬러는 마우스 롤오버 색, 타이틀 배경색 등에 사용됩니다.
기본 디자인은 전면에 사진을 2~4열로 연속적으로 나열하고 있기 때문에 무엇보다 사진의 퀄리티에 의해 디자인 퀄리티가 좌우됩니다(1280*1024에서 3열).

메인페이지에서 마우스 롤오버를 하게 되면, 해당 포스트의 타이틀, 요약글, 카테고리 등이 나타나서 내용을 살짝 옅볼 수 있게 해 놓았으며, 컨텐츠는 상단 이미지 슬라이어(동영상 지원)와 하단 2단 레이아웃 구성의 내용으로 출력됩니다.

제작시 큰 문제가 없었지만, 단지 테마포레스트에서 받은 버전을 설치하니 업데이트 버전으로 설치하라는 메시지가 떠서 업데이트 했더니 메인페이지 사진 배열에 문제가 발생하고 클릭시 링크된 컨텐츠을 찾지 못하는 경우가 있었습니다. 알고 보니 고유주소 문제였고... 그냥 워드프레스 기본값으로 설정하니 문제가 해결되었습니다. 그래도 사진 배열 문제는 없어지지 않아 다시 원래 버전으로 돌아올 수 밖에 없었습니다.

장점
- 차분하고 정돈된 디자인 & 레이아웃.
- 동영상 지원 이미지 슬라이더 포함.
- 커스텀 포스트 타입으로 Project와 Gallery 2개 제공.
- 이미지 노출방식 수정으로 디자인 스타일 변경 가능.
- 테마 옵션에서 다양한 설정 가능 - 요약글(excerpt) 기능, 구글맵
- 샘플 데이터 제공.

단점
- 신버전 업데이트시 이미지 배열상 약간의 문제 발생.
- 이미지 슬라이더가 좀 무거움.
- 페이지기능 (pagination) 미지원(?).

제작홈페이지
http://www.interviewkorea.com/

Lens 테마
http://themeforest.net/item/lens-an-enjoyable-photography-wordpress-theme/5713452?WT.ac=search_thumb&WT.seg_1=search_thumb&WT.z_author=pixelgrade




'워드프레스 > 테마 & 플러그인' 카테고리의 다른 글

Meta Slider  (0) 2014.05.05
Inovado  (0) 2014.05.05
Easy Fancybox (한글 언어 파일 추가)  (0) 2014.04.15
Auto Excerpt everywhere (한글화 파일 추가)  (0) 2014.04.11
Egofolio  (0) 2014.04.03
블로그 이미지

환타73

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

,

김내혜 홈페이지 메인 김내혜 홈페이지 서브

Egofolio 테마로 친분이 있는 작가분 홈페이지를 제작. 4월 7일 오픈.

처음에는 기본틀에서 큰 변화없이 컨텐츠만 채우는 것으로 생각했는데, 작가분 마음이 살짝 바뀌어서 회원기능을 넣기와 중간 메뉴를 넣어 년도별 포트폴리오를 설명할 브릿지 페이지를 원함. 둘 다 테마 자체에서는 지원하지 않는 기능.

회원기능 넣기의 경우 Members 플러그인을 사용해서 구현은 했지만 Portfolio 부분의 이미지슬라이드 부분은 멤버기능에서 벗어난 상태로 무조건 노출됨. 이것을 바꾸려면 테마 코어 파일을 뜯어 고쳐야 함.
작가분께 말을 하고 회원기능 포기 또는 슬라이드 기능을 포기하고 게시물 내용에 그냥 이미지 삽입으로 대체 중 택1을 종용. 결국 회원기능을 포기하고 슬라이더 사용 & 컨텐츠 100% 오픈으로 결정.

브릿지 페이지의 경우도 테마 자체가 ajax를 사용해서 원페이지 로딩으로 페이지를 불러오고, 서브메뉴 기능이 없기 때문에 일이 커진다는 것을 다시 한번 강조. 처음 컨셉 "심플 & 오픈(공개)"를 다시 한 번 상기.

결국 맨 처음 기획대로 진행하기로 함...

Egofolio 테마에 관한 평가.

장점
- 심플하고 멋진 디자인 & 깔끔한 원페이지 애니메이션.
- 간단한 사용방법.
- 포트폴리오용 이미지 슬라이더 기본제공.
- 부트스트랩 기반 레이아웃 및 몇개의 쇼트코드 제공.

단점
- 서브메뉴 미지원.
- 샘플 데이터 미제공.
- 포트폴리오 페이지네이션(pagenation) 미지원 = 내용이 늘어날 수록 스크롤이 계속 길어짐;;;
- 메인페이지 부분의 이미지 슬라이더 부분에서의 이미지 정렬 문제 미해결.
   제작사에 문의하여 CSS 수정으로 맞추긴 했지만 브라우저 가로크기가 좁아졌을 때 이미지 중앙 정렬이 자동으로 안 됨.
   아이폰 오페라브라우저에서도 슬라이더 이미지의 중앙정렬이 자동으로 안됨.
- IE9 이하에서 메인페이지 슬라이더의 이미지가 왜곡됨. HTML5 호환성문제로 보임.
- Content 부분에서 이미지 원본보기 링크 시 문제 있음. 원페이지 로딩을 위한 ajax 애니메이션 기능과 충돌발생.
   Blog 부분에서는 정상 작동.
- 초기셋팅이 고유주소를 postname으로 하는데 IE에서 404에러 발생함. slug를 '영문'으로 적용하여 해결.
- 초기셋팅이 .htaccess를 건드려서 500 내부서버오류 발생함.
   테마의 function.php에서 .htaccess 변경 부분을 주석처리해서 해결.

후기
- 슬라이더 이미지 중앙정렬 부분의 해결이 필요하다. 그런데 테마포레스트의 샘플페이지는 잘 나오는 것은 함정.
- 역시 삽질은 필요하다.
- 재구매는 안 할 것 같다.

제작 홈페이지
http://www.kimnaehye.com/

Egofolio 테마
http://themeforest.net/item/egofolio-history-ajaxed-reponsive-wordpress-theme/2772200?WT.ac=solid_search_item&WT.seg_1=solid_search_item&WT.z_author=undsgn

 

'워드프레스 > 테마 & 플러그인' 카테고리의 다른 글

Meta Slider  (0) 2014.05.05
Inovado  (0) 2014.05.05
Easy Fancybox (한글 언어 파일 추가)  (0) 2014.04.15
Auto Excerpt everywhere (한글화 파일 추가)  (0) 2014.04.11
Lens  (0) 2014.04.11
블로그 이미지

환타73

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

,