Bookmark profile

헤더란 무엇인가? 워드프레스 테마의 첫 걸음

헤더는 웹사이트의 가장 상단에 위치하여 로고, 네비게이션 메뉴, 검색 창 등 중요한 요소를 포함하는 공간입니다. 이 섹션에서는 헤더의 개념과 워드프레스 테마에서의 역할을 소개합니다. 또한, header.php 파일의 위치와 구조를 설명합니다.

아래의 이미지를 보시면, 테마 폴더 하위에 header.php가 포함되어있는 것을 볼 수 있습니다. 테마의 헤더를 만들기 위해서는 테마 폴더를 생성한 후, 아래의 이미지와 같이 header.php 파일을 만들어야 합니다.

워드프레스

파일을 다 만들었다면, 이 header.php 파일이 어떤 정보를 가지고 있는지를 알아야 합니다.

header.php 파일은 head와 header 라는 총 2개의 영역에 대한 정보가 담겨있습니다. 이 영역들을 코드로 표현하자면, 아래와 같이 head 태그와 header 태그의 영역을 의미합니다.

<!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head> 첫번째 영역 </head>
<body>
  <header> 두번째 영역 </header>

워드프레스 헤더의 첫 번째 구성 요소: <head>

이 영역에는 블로그의 이름, 설명, 썸네일 등이 표시됩니다. 이 정보는 검색엔진 최적화에 중요한 역할을 합니다. 그렇기 때문에 꼭 공들여서 작성을 하셔야 합니다!

하지만, 워드프레스에서 기본적으로 제공하는 함수를 사용하여 이러한 정보드를 입력할 수 있습니다. 매우 편리하죠? 아래처럼 워드프레스에서 제공해주는 함수만 사용한다면, 작성한 글에 맞게 제목과 설명을 알아서 넣어줍니다.

<head>
  <meta charset="<?php bloginfo('charset'); ?>">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>
    <?php wp_title('|', true, 'right'); ?><?php bloginfo('name'); ?>
  </title>
  <?php wp_head(); ?>
</head>

워드프레스 헤더의 두 번째 구성 요소: <header>

이 영역에서는 로고, 네비게이션, 메뉴 버튼 등의 요소가 포함됩니다. 이번 포스팅에서는 가장 기본적인 요소인 로고/네비게이션/메뉴버튼을 넣는 방법을 설명하겠습니다.

우선 HTML요소로 세 가지 요소를 넣는 방법은 다음과 같이 매우 쉽습니다!

그대로 따라서 작성해주시면 완성입니다!

<header>
  <!-- 로고 -->
  <img src="/logo.png" >

  <!-- 네비게이션 -->
  <ul>
    <li><a href="#">Home</a></li>
    <li><a href="#">About</a></li>
    <li><a href="#">Contact</a></li>
  </ul>

  <!-- 메뉴버튼 -->
  <button>
    <img src="/menu.png" >
  </button>
</header>

워드프레스 헤더 파일 사용하기

이렇게 완성된 헤더를 실제 페이지에서 사용하는 방법을 알아보겠습니다.

워드프레스에서는 홈페이지를 나타내는 home.php 파일과 글의 내용을 나타내는 single.php 파일이 있습니다. 물론 header.php와 마찬가지로 직접 생성을 해 주셔야 합니다.

생성만 해 주신다면, 워드프레스가 알아서 홈페이지와 글 상세 페이지 주소에 맞게 해당 파일을 보여주도록 설정이 되어있으므로 따로 할 일은 없습니다.

  • theme/home.php
  • theme/single.php

두 파일을 생성했다면, 위에서 만든 헤더를 [홈페이지]와 [글 상세 페이지] 상단에 표시를 해 주어야 합니다. 이렇게 특정 페이지에 헤더를 불러오기 쉽도록 워드프레스에서는 get_header() 함수를 제공하고 있습니다.

이 함수를 통해서 [홈페이지]와 [글 상세 페이지]에 어떻게 헤더를 나타낼 수 있는지 알아보겠습니다.

<?php get_header(); ?>

이렇게, 헤더를 나타내고 싶은 파일의 맨 위에 <?php get_header(); ?> 를 추가해 주는 것으로 header.php 내용이 들어오게 됩니다.

우리가 추가하고 싶은 페이지는 home.php, single.php 파일이므로 그 파일의 상단에 각각 <?php get_header(); ?> 를 추가해 주면 됩니다.

// home.php
<?php get_header(); ?>

// single.php
<?php get_header(); ?>

CSS를 활용하여 나만의 헤더 만들기

헤더를 꾸미기 위해서는 먼저 style.css 파일을 만들어야 합니다. 여기서 style.css 파일이란 위에서 만든 파일들과 마찬가지로 워드프레스 테마의 기본 파일중 하나 입니다.

위에서 한 작업과 동일하게 프로젝트 폴더에 style.css 파일을 만들어 줍니다.

  • theme/style.css

style.css 파일을 생성했다면, 헤더 파일과 마찬가지로 이 파일을 사용하기 위해 불러오는 과정이 필요합니다. style.css 파일도 워드프레스 테마의 기본 파일이기 때문에 당연히 불러오는 함수를 제공하고 있습니다.

하지만, 이 파일은 조금 전 헤더와는 다르게 각각의 페이지에 따로 불러오는 것이 아니라, 헤더에 직접 넣어서 헤더가 보여지는 모든 페이지에 사용할 수 있도록 해야합니다.

그 이유는 이 style.css 파일에는 모든 페이지의 스타일 코드가 작성될 예정이기 때문입니다.

header.php 파일을 열고, 아래 코드 한 줄을 추가해 줍니다.

<link rel=”stylesheet” href=”<?php echo get_stylesheet_uri(); ?>”>

<head>
  ...
  <!-- 스타일 파일 추가 style.css -->
  <link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>">
</head>

헤더의 구성 요소에 CSS 적용하기

헤더의 각 HTML 요소마다 class 속성에 적절한 이름을 넣어줍니다.

<header class="header">
  <img class="header__image" src="/logo.png" >
  <ul class="header__navigation">
    <li class="header__navigation__item">
      <a class="header__navigation__item__link" href="#">
        Home
      </a>
    </li>
    <li class="header__navigation__item">
      <a class="header__navigation__item__link" href="#">
        About
      </a>
    </li>
    <li class="header__navigation__item">
      <a class="header__navigation__item__link" href="#">
        Contact
      </a>
    </li>
  </ul>
  <button class="header__menu">
    <img class="header__menu__icon" src="/menu.png" >
  </button>
</header>

이제 class 이름에 맞춰서 style.css 파일에 꾸미기 위한 내용을 작성합니다. 저는 가로정렬과 세로정렬 및 폰트사이즈 정도만 수정했습니다.

.header {
  display: flex;
  flex-direction: row;
  align-items: center;
  padding: 0 40px;
  height: 80px;
}
.header__image {
}
.header__navigation {
  flex: 1;
  display: flex;
  flex-direction: row;
  justify-content: center;
}
.header__navigation__item {
  list-style: none;
  margin-right: 60px;
}
.header__navigation__item:last-child {
  margin-right: 0;
}
.header__navigation__item__link {
  text-decoration: none;
  color: black;
  font-size: 20px;
}
.header__menu {
  width: 48px;
  height: 48px;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;
}
.header__menu__icon {
}

뭔가 깔끔하고 보기 좋은 헤더가 완성되었습니다!

최종 코드 정리: 전체 헤더 코드 한 눈에 보기

theme/header.php

<head>
  <meta charset="<?php bloginfo('charset'); ?>">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>
    <?php wp_title('|', true, 'right'); ?><?php bloginfo('name'); ?>
  </title>
  <?php wp_head(); ?>
  <link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>">
</head>
<body>
  <header class="header">
    <img class="header__image" src="/logo.png" >
    <ul class="header__navigation">
      <li class="header__navigation__item">
        <a class="header__navigation__item__link" href="#">
          Home
        </a>
      </li>
      <li class="header__navigation__item">
        <a class="header__navigation__item__link" href="#">
          About
        </a>
      </li>
      <li class="header__navigation__item">
        <a class="header__navigation__item__link" href="#">
          Contact
        </a>
      </li>
    </ul>
    <button class="header__menu">
      <img class="header__menu__icon" src="/menu.png" >
    </button>
  </header>

theme/home.php

<?php get_header(); ?>

theme/single.php

<?php get_header(); ?>

theme/style.css

.header {
  display: flex;
  flex-direction: row;
  align-items: center;
  padding: 0 40px;
  height: 80px;
}
.header__image {
}
.header__navigation {
  flex: 1;
  display: flex;
  flex-direction: row;
  justify-content: center;
}
.header__navigation__item {
  list-style: none;
  margin-right: 60px;
}
.header__navigation__item:last-child {
  margin-right: 0;
}
.header__navigation__item__link {
  text-decoration: none;
  color: black;
  font-size: 20px;
}
.header__menu {
  width: 48px;
  height: 48px;
  display: flex;
  flex-direction: row;
  align-items: center;
  justify-content: center;
}
.header__menu__icon {
}