Мой сайт о WordPress и PHP С Днем победы!
19 марта 2007

Выпуск 24. Делаем собственный шаблон

Читали 8381 раз
Рубрика: E-mail рассылка
Навигация: Главная » WordPress » E-mail рассылка

Шаблоны WordPress

Многие хотели бы научиться делать свои шаблоны для WordPress'а. Вот недавно появился перевод "Сделайте вашу собственную тему для Wordpress" - на мой взгляд отличное руководство, хотя и не лишенное недостатков.

Совсем недавно нас порадовал Денис с "WP Theme Design Show" (создание шаблона для WordPress). Так что эти ссылки, надеюсь, вам пригодятся.

С моей стороны, предлагать вам еще одно руководство по созданию шаблонов, да еще и утверждать, что оно лучше других, было бы легкомысленно. Поэтому, я решил сделать несколько выпусков, в которых на простых примерах, с подробным разъяснением показать как бы это делал сам. Если вам эти опыты покажутся интересными и полезными, буду только рад.

Как обычно я буду стараться подробно останавливаться на каждом шаге. Для опытных это может показаться нудноватым, но я рассчитываю на неподготовленного читателя.

Как и чем работать будем?

Перед тем, как приступить непосредственно к написанию шаблона, нужно определиться с основами. Нам потребуются знания как минимум из четырех обласей:

  • Умение читать HTML
  • Умения читать и разбираться в CSS
  • Иметь представление о PHP
  • Знать основы WordPress

Я напомню, что многие из этих вопросов я уже рассматривал в предыдущих выпусках рассылки, поэтому вы можете обратиться к её архиву.

Для написания самого кода нам потребуется самый обыкновенный Блокнот или его улучшенный вариант, например Notepad2. Впрочем это не принципиально и вы можете выбрать свой вариант. Главное, чтобы вам было удобно с ним работать.

Основная идея шаблона

Первым шагом мы должны определиться со структурой нашего шаблона. Нам нужно держать в голове функциональные блоки WordPress (блок рубрик, ссылок, счетчиков, рекламы, управления и т.д.) и представить себе их расположение на сайте.

Чтобы как-то визуализировать этот процесс, воспользуемся отличной подборкой из 40 готовых каркасов.

Об этой ссылке я узнал у одного из участников группы русского WordPress'а. Если у вас есть аккаунт на Google, то вы можете присоединиться к группе.

Я решил остановиться на трехколоночном варианте (номер 9), поэтому вам нужно будет тоже его скачать.

Переходим к WordPress'у

Каркас, который мы только что скачали, содержит в себе готовый css-код, благодаря которому осуществляется позиционирование элементов структуры сайта. Конечно же это самый минимум, но для нас это идеальное решение, поскольку мы теперь сможем сами добавить нужные блоки и оформление к ним.

Чтобы подключить шаблон к WordPress'у нужно сделать в каталоге /themes/ , каталог, в котором и будет располагаться наш шаблон. Шаблон мы назовем Rioni, соответственно и каталог будет с тем же именем.

Сейчас нам не нужно думать ни об оформлении, ни о программировании. На этом этапе мы должны просто создать файлы, которые будет понимать WordPress.

Файл style.css

Описание шаблона хранится в этом файле в самом верху в виде css-комментария. То есть вы создаете пустой файл с именем style.css. В самом его верху пишем:

/*
Theme Name: Rioni
Theme URI:
Description: Обучающий шаблон Rioni
Version: 1.0
Author: MAX
Author URI: http://maxsite.org/
*/

После этого откроем наш каркас (файл "LayoutGala09.html") и скопируем из него css-стили ( они располагаются между строк:

<style type="text/css">

... нужный нам код ...

</style>

Обратите внимание, что кодировка нашего шаблона будет UTF-8. Если вы используете другую, то измените её указание там, где она явно указана.

В итоге мы получаем нужный нам css-файл.

Файлы шаблона

WordPress-шаблон может состоять всего из двух файлов: style.css и index.php. Однако, это не самый подходящий вариант, поскольку нам нужно будет разделить шаблон для разных функциональных частей: меню, подвал, шапка и т.д. Поэтому, мы сделаем такую структуру:

  • header.php (вывод заголовков html)
  • index.php (основной файл)
  • sidebar-1.php (первое боковое меню)
  • sidebar-2.php (второе боковое меню)
  • footer.php (подвал)
  • main.php (вывод содержимого)

Файлы index.php

Этот файл является главным для шаблона WordPress. Если нет другого файла-шаблона, например home.php (используется для вывода главной страницы), то WordPress отдает управление именно в файл index.php.

Создаем файл index.php. В самом начале подключаем:

<?php
require('./wp-blog-header.php');
require_once('header.php');
?>

Первый файл нужен нам для "подключения" к функциям WordPress, а вторым мы подключаем header.php, в котором будет находиться html-секция HEAD.

После этого открываем наш каркас и копируем из него все строки (в index.php):

</head>
<body>

... вот от этих тэгов и копируем до конца файла ...

Файл footer.php

В этом файле мы подключим подвал сайта. Поскольку пока мы не решили все вопросы с оформлением, то пока добавим в этот файл любой текст, например:

<p>(C) 2007, RIONI</p>

Подключаем footer.php

Открываем файл index.php и в конце файла находим блок подвала:

<div id="footer"><p>Here it goes the footer</p></div>

Должно получиться так:

<div id="footer">
<?php require('footer.php'); ?>
</div>

Файл header.php

Этот файл практически во всех шаблонах типовой. В нем содержатся мета-тэги, подключаются стили, пинги и т.д. Я привожу сразу готовый вариант, поскольку особых вариаций не требуется:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html><head>

<title><?php wp_title(); ?></title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<meta name="generator" content="WordPress <?php echo $wp_version ?>">

<meta name="description" content="">

<meta name="keywords" content="">

<link rel="shortcut icon"
   href="<?php echo get_settings('siteurl'); ?>/favicon.ico"
   type="image/x-icon">

<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>"
   type="text/css" media="screen">

<link rel="pingback" href="<?php bloginfo('pingback_url'); ?>">

<link rel="alternate" type="application/rss+xml" title="RSS 2.0"
   href="<?php bloginfo('rss2_url'); ?>">

<link rel="alternate" type="text/xml" title="RSS .92"
   href="<?php bloginfo('rss_url'); ?>">

<link rel="alternate" type="application/atom+xml" title="Atom 0.3"
   href="<?php bloginfo('atom_url'); ?>">

<?php wp_head(); ?>

</head>

<body>

<!-- end header -->

Первая проверка

Начальный этап завершен. Теперь мы можем зайти в админ-панель и выбрать шаблон Rioni. Если вы все сделали правильно, то на сайте вы должны увидеть наш каркас (один в один).

Конечно же пока наш шаблон не обладает нужной функциональностью, зато мы смогли перенести html-шаблон на WordPress :-) .

С этого момента мы сможем контролировать процесс разработки визуально, просто обновляя браузер.

Лирическое отступление

Мне бы хотелось, чтобы вы попробовали выполнить все предлагаемые действия. Если вы действительно хотите понять процесс создания шаблона, то простое "копи-пасте" вас ни чему не научит. Только выполнение задачи, когда вы столкнетесь с какими-нибудь трудностями и сможете их решить, только так можно научиться чему-либо. Другого пути нет.

Название блога

Наполним шаблон небольшой функциональностью. Для этого мы будем использовать функции WordPress'а. Начнем с названия блога.

Используем функции:

  • bloginfo('name') - вывод названия
  • bloginfo('description') - описание блога
  • bloginfo('siteurl') - путь к главной странице

Находим в index.php div-блок "отвечающий" за вывод верхней шапки. Несложно догадаться, что это <div id="header">.

Добавляем наши функции:

<div id="header">
<h1><a href="<?php bloginfo('siteurl') ?>/"><?php bloginfo('name') ?></a></h1>
<h2><?php bloginfo('description') ?></h2>
</div>

Сразу же проверяем результат. Мы видим, что текст в шапке расположен не совсем верно -получились слишком большие отступы между текстами. Для его исправления нам нужно править style.css.

Правила CSS

Чтобы ориентироваться в CSS, вам нужно знать несколько несложных правил.

1. Для описания тэга в CSS можно использовать такую конструкцию, например :

h1 { color: #FF00FF; margin: 10px; }

Эта запись будет означать, что все тэги <h1> будут отображены цветом #FF00FF и иметь отступ 10px с каждой стороны.

Сразу определимся с браузером. Дело в том, что есть хорошие браузеры, а есть плохие, например IE. Чтобы нам не мучиться, мы будем делать шаблон только для хороших браузеров, например FireFox или Opera, потому что они соответствуют стандартам. А для плохого браузера, при желании, мы в самом конце может быть сделаем костыли в виде хаков. Другого способа нет.

2. Если нам нужно описать идентификатор ID, то используем такую конструкцию:

div#header {height: 150px; margin: 0; background: #EEE; color: #79B30B;}

Эта запись будет применена в тегу <div id="header">. Для него установится высота 150px, фон цвета #EEE (короткая запись, которая соответствует #EEEEEE) и цвет текста внутри блока будет #79B30B.

3. Если нам нужно описать класс (class), то пишем:

h1.header {color: red;}

Это оформление будет применено к тэгу: <h1 class="header">.

4. Кроме этих правил, в CSS используется наследование. Например, если мы запишем:

div #footer p {margin: 0; padding: 10px;}

- то это будет означать, что тэги <p>, внутри элемента с id="footer", который входит в <div> будет иметь внешний отступ 0px и внутренний 10px.

5. Ну и на последок, есть еще одно правило: если вы вначале файла определили элемент, например красным цветом, а после переопределили его зеленым, то отображаться он будет зеленым.

Теперь, зная эти правила, мы сможем приступить к редактированию наших стилей.

Подправим style.css

Поскольку нам все равно переделывать стили, то есть смысл сразу же подчистить существующие, чтобы в дальнейшем к этому вопросу не возвращаться.

Порядок таков: смотрим появляющиеся тэги (а также id, class) в index.php, и в такой же последовательности определяем их в style.css.

Первым нам попадется тэг <body>. Определяем его так:

body {font-family: Arial, Sans-serif; font-size: 10pt;}

- то есть мы определили, что базовым размером шрифта для всего шаблона будет 10pt, гарнитурой Arial.

После этого мы находим div#container. Обратите внимание, что в файле он встречается дважды. В этом блоке находится содержимое всего шаблона, поэтому этот блок отвечает за выравнивание по центру браузера.

Пишем так:

div#container {width: 700px; margin: 0 auto;}

Этим мы указываем, что ширина блока 700px, а выравнивание достигается автоматической установкой отступов слева и справо, а сверху и низу нулевыми.

После этого у нас пойдут блоки с текстами, поэтому перед ними нужно прописать основные установки для ссылок и абзацев (пока этого хватит). После этого можно будет изменить стиль (например ссылок) в конкретном блоке.

Пишем:

p {margin: 3px 0px 4px 0px;}
a {color: red;}

С ссылкой думаю, ясно, а вот параметры margin расшифрую. Все оступы можно указать короткой записью в следующем порядке: верх, право, низ, лево, то есть обход по часовой стрелке, начиная от полдня (так легче запомнить).

В конце подчистки вам нужно будет самостоятельно сгруппировать повторяющиеся элементы, чтобы они оказались рядом.

Делаем header

Как видно по коду, нам нужно переопределить стиль для div#header. Наш h1 находится в div#header. Но, для начала, неплохо было бы определить сам div#header и, после, значения для h1 и h2.

Я решил, что саму надпись названия блога и его описание нужно разместить на сером фоне снизу слева. Делается это так:

div#header {background: #EEE; padding: 100px 10px 10px 10px;}
div#header h1 {font-size: 14pt; margin: 0px;}
div#header h2 {font-size: 10pt; margin: 0px;}

Думаю, что этот код не вызовет у вас затруднений, но всё-таки его опишу.

  • div#header - устанавливаем фон серый (#EEE); внутренние отступы: сверху - 100px, остальные по 10px.
  • div#header h1 - элемент h1 в этом блоке: шрифт 14pt, все отступы сбрасываем.
  • div#header h2 - аналогично предыдущему, для h2 только размер шрифта 10pt.

На цвета мы сейчас особого внимания не обращаем. Они настраиваются в последнюю очередь. Сейчас главное размеры и расположение элементов.

Если у вас не было ошибок, то вы увидите уже рабочий шаблон с ссылкой на главную страницу (хотя, больше ничего пока и нет :-) ).

Ну а, если у вас возникли проблемы и, что-то не получилось, то вы можете скачать мой вариант и сверить со своим.

Продолжение: http://maxsite.org/ras25

Весь курс создания шаблона:

  • Первый шаг
  • Второй шаг
  • Третий шаг
  • Четвертый шаг
  • Последние штрихи
  • google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

    11 комментариев к “Выпуск 24. Делаем собственный шаблон”

    1. Number One:

      поправочка.
      WPTDS - это не только в фотошопе тема. фотошоп - это только начало. далее я распишу (примерно как ты выше) как делается тема.

    2. Number One:

      внимательно перечитал. можно позанудствую?

      сначала два глобальных момента:
      1. если чему-то учить, то думаю что надо сразу учить правильным вещам (это и будет занудство, ниже)
      2. не вижу особого смысла создавать тему с нуля, файлик за файликом. по-моему трудо- и временные затраты не стоят этого, учитывая что существует большое (огромное) количество тем, которые можно взять за основу и при наличии знаний по CSS (или подробных инструкций) подогнать их (темы) под свои нужды.

      но вместе с тем - респект за поднятую тему. Больше нужной и качественной информации по вопросам WP!

      Занудство с цитированием:

      (C) 2007, RIONI

      &copy; - спецсимвол для значка копирайтов

      Теперь мы можем зайти в админ-панель и выбрать шаблон Rioni.

      а если создать картинку screenshot.png и положить в корень темы - будет наглядно видно какая тема.

      div #header

      во-первых, лишний пробел между div и #. получается что у тебя внутри div'a лежит какой-то элемент с ID=header. во-вторых,ID - это уникальный идентификатор, и на странице не может быть двух элементов с одинаковым ID. Поэтому запись div#header - избыточна, потому что не может быть например h1#header и div#header одновременно.

      font-size: 10pt;

      не есть хорошо указывать размер шрифта в фиксированных единицах. я пользуюсь такой конструкцией:

      font: small Arial, .... - здесь small задает базовый размер примерно равный размеру medium в браузере. А размеры для элементов задаются в % от small. Например, те же 10pt будут примерно 75%, а для заголовков можно использовать 220 - 300%. При этом шрифты масштабируются.

      что ширина блока 700px, а выравнивание достигается автоматической установкой отступов слева и справо, а сверху и низу нулевыми.

      не знаю, может это в стилях шаблона и прописано, но тут не указано, что при таком способе выравнивания контейнера по центру у BODY должно быть свойство text-align:center. А так как это свойство каскадно распространится на все элементы (которые в коде идут "ниже" BODY), то для контейнера выравнивание контента надо переопределить с помощью text-align:left

      div#header h1 {font-size: 14pt; margin: 0px;}
      ...
      шрифт 14pt, все отступы сбрасываем.

      если в начале CSS-файла не было конструкции * {margin:0; padding:0}, которая сбрасывает все отступы у всех элементов, то у h1 остался padding по умолчанию, который есть у некоторых элементов типа h, ul/ol, blockquote и некоторых других.

      P.S. я не претендую на звание мега-кодера-который-все-знает, я просто отметил моменты, которые сам использую (или по крайней мере стараюсь использовать) в своих работах.

    3. JawsIk:

      Очень даже не плохо написано. Я всегда за "понятные" руководства

    4. Максим:

      Внимательно перечитал. можно позанудствую?

      Можно, можно. :wink:

      WPTDS - это не только в фотошопе тема.

      Исправил. Наверное я сам неверно понял. :)

      1. если чему-то учить, то думаю что надо сразу учить правильным вещам

      Абсолютно с тобой согласен, только есть пару моментов. Я думал стоит ли давать все тонкости CSS в рассылке? Решил что нет, поскольку, сам знаешь, «особенностей» и «хитростей» CSS слишком много - если их приводить, то потребуется сделать еще пару выпусков с подробным объяснением. Поэтому я решил давать просто готовый рецепт с очень кратким описанием. Для любого, кто захочет разобраться, думаю они будут понятны. А нюансы уже на потом :) .

      2. не вижу особого смысла создавать тему с нуля, файлик за файликом. по-моему трудо- и временные затраты не стоят этого, учитывая что существует большое (огромное) количество тем, которые можно взять за основу и при наличии знаний по CSS (или подробных инструкций) подогнать их (темы) под свои нужды.

      Ну это ты сейчас так говоришь, поскольку знаешь все тонкости. Я же представляю себе ужас в глазах тех, кто откроет готовую тему, даже default и увидит всё это месиво кода :) . Используя готовую тему мне пришлось бы попытаться объяснить чуть ли не каждый кусок кода. А так, все проще - есть каркас и шаг за шагом мы из него делаем рабочий шаблон. Думаю, что так будет понятней.

      div #header
      во-первых, лишний пробел между div и #.

      Ага, спасибо! Исправил опечатку. В файле вроде все верно написал, а в тексте зачем-то пробел добавил. :???:

      Насчет ID, да еще и в DIV'е совершенно верно. Лично я вообще стараюсь не использовать ID в принципе, указываю class. Но в данном случае, за основу мы взяли чужой каркас и, если его переделывать, то спрашивается, зачем вообще брали? :idea:

      Но, вообще ты прав: в следующем выпуске переделаем эти решетки :) .

      не есть хорошо указывать размер шрифта в фиксированных единицах.

      Я использую фиксированные размеры по той же причине, что ты и указал: браузер использует свое значение medium, small и т.д. Мне больше по душе, когда я задаю фиксированный кегль, поскольку буду уверен, что он будет един на всех браузерах. Ну а масштабирование для браузеров не помеха.

      у h1 остался padding по умолчанию, который есть у некоторых элементов типа h, ul/ol, blockquote и некоторых других.

      Я наверное зря не упомянул, что оформление шаблона будет другое, а не как у этого каркаса. :) Думаю добавить в шапку картинку-фон, и цвета подобрать (только уже в самом конце).

      Ну, а вообще (Денис, дальше не читай!), товарищи читатели, было бы неплохо уговорить (заставить, шантажом, взяткой, в плен взять, умолять на коленях, пообещать поставить его памятник на вокзале в каждом городе, выдвинуть в президенты - нужное выбрать) Дениса сделать (в свободное от работы время) на основе этого каркаса свой вариант дизайна. Кто «за»?

    5. Delchyve:

      Ну вот. только собрался написать о создании темы, как Вы, сэр, меня опередили. Эх... ну что за жизня...

    6. sonika:

      не вижу особого смысла создавать тему с нуля, файлик за файликом. по-моему трудо- и временные затраты не стоят этого, учитывая что существует большое (огромное) количество тем, которые можно взять за основу и при наличии знаний по CSS (или подробных инструкций) подогнать их (темы) под свои нужды.

      Вы меня сразили! Разве с нуля сделать сложнее, чем переделать? Я только один раз пределывала, и тогда поняла: хуже чужого кода только вражеский :) Это ж еще перелопатить надо, что больше подходит по внешнему виду и по функциональности! А потом в результате переделки в css «мусор» остается (неиспользуемые классы и все такое), отлавливать «зае…шься»…
      Нет, я за темы с нуля и чистый код :)

    7. Number One:

      2 sonika:
      я ж со своей колокольни говорю. я не програмист ни с какого боку, поэтому мне проще опытным путем разобраться как оно работает и сделать по-моему.

      а css, да... В дефолтовый кубрик страшно просто смотреть. Я один раз взял и переписал все - теперь использую в работе.

    8. theannounce:

      что касается css, то там нет ничего страшного, а вот полезного очень даже много. предлагаю ознакомится, тем кто ещё не совсем знаком с этим делом.
      CSS стили - много полезного и интересного.

    9. levati:

      Спасибо за статью. Сам пытался написать нечто похожее, но Ваша много профессиональнее выглядит. :cool: Буду стараться больше :smile:

    10. v1ri4:

      Спасибо огромное за статью.

      Вы пропустили закрывающую скобку:

      bloginfo('siteurl' - путь к главной странице

      .

    11. Максим:

      Спасибо, исправил!


    Оставьте комментарий! (Вы согласны с правилами)

     

    :mrgreen: :neutral: :twisted: :arrow: :shock: :smile: :???: :cool: :evil: :grin: :idea: :oops: :razz: :roll: :wink: :cry: :eek: :lol: :mad: :sad: :!: :?:

    При добавлении кода (html, php) заменяйте < на &lt; и > на &gt;.
    Внимание: антиспам - зверь! Копируйте своё сообщение перед отправкой. На всякий случай.