Извращения с темами WordPress для новичков и не только (Часть 1)
Интересно, есть ли ещё люди, сомневающиеся в том, что на WordPress можно сделать сайт практически любой сложности, сохранив при этом удобство управления контентом через стандартную админку?
Можете не отвечать, сам знаю, что хватает людей, которые делают кислую мину при упоминании, что сайт работает на WP: “Это же блоговый движок, все сайты на нём одинаковые-шаблонные…”
Ага, шаблонные, но попрошу рассматривать этот факт, не как минус, а как ОГРОМНЫЙ плюс, потому что это означает лишь то, что вы можете САМИ настроить всё именно так, как вам хочется - расположить элементы, определить условия вывода данных и многое-многое другое.
И не смотрите на мой блог с ухмылкой, как говорится “сапожник без сапог”, зато с определенным опытом, которым сейчас буду делиться. Для понимания потребуются минимальные знания php, редактор (можно и в блокноте), сам вордпресс и желание творить.
Тэги условий
В WordPress есть так называемые тэги условий, при помощи которых вы можете определять, как и на какой странице у вас будет показываться контент, рубрики, да и вообще почти всё что угодно. Надеюсь, несколько примеров помогут вам освоиться, а в дальнейшем вы собственноручно сможете изучить все остальные условные тэги и применять их по необходимости.
Подсвечиваем в меню текущую страницу
Предположим у нас есть 3 страницы “Обо мне”, “О блоге”, “Контакты” (короткие имена about/bloginfo/contacts), отображаемые в меню, и мы хотим, чтобы при нахождении на одной из этих страниц, соответствующий пункт меню был подсвечен или как-нибудь по другому выделен. Для этого дела в style.css мы создаём класс .current, которому задаём то, как хотим “подсветить” пункт меню.
То на какой странице мы находимся, определяется при помощи функции is_page(), в которую передаётся короткое имя страницы. Если короткое имя соответствует текущей странице, то возвращается true и выполняется условие идущее в фигурных скобках.
Не путайте страницы и записи/посты!
Для примера меню будет сделано в виде списка, если у вас другая реализация, то действуйте по аналогии.
Не сложно догадаться, что когда мы находимся на любой другой странице, то у нас подсвечен будет первый пункт - “Главная”.
Динамические заголовки страниц
Можно конечно назвать это неким подобием SEO, хотя лучше всё же использовать специализированные плагины для оптимизации (например, All In One SEO Pack), но этот же метод можно применять и в других ситуациях. Итак, открываем файл header.php своей темы и вносим изменения в <title> .
В этом устрашающего вида коде мы последовательно проверяем? на какой же странице находимся “Главная > Несуществующая > Рубрика > Поиск > Архив > Страницы и посты”. Функция bloginfo(’name’) выдаст нам название блога, wp_title(”) - заголовок по умолчанию (для постов - это “Заголовок”, для рубрик - их название).
Выделение постов определенной рубрики
Если появилось желание каким-то особым способом пометить пост из определенной рубрики, то открываем index.php своей темы (не перепутайте его с одноименным файлом в корне сайта), находим строчку похожую на
и модифицируем её до вот такого вида
Теперь всем постам из рубрики номер 5 (номера можно посмотреть в разделе “Управление > Рубрики”) будет дополнительно присвоен класс “feature”. Тут стоит отметить, что перед “feature” обязательно должен стоять пробел, чтобы классы не “склеились”. Осталось только придумать и описать в стилях (style.css) соответствующий класс.
Отдельные шаблоны для постов из разных рубрик
А почему бы не сделать для каждой рубрики разное оформление при отображении поста? Пусть в рубрике “авто” будет на фоне машина и сайдбар слева, а в рубрике “мото” разместим мотоцикл и сайдбар справа.
Получается нам потребуется 3 шаблона: мото, авто и по-умолчанию.
Копируем файл single.php из своей темы три раза и обзываем файлы single_auto.php, single_moto.php, single_other.php.
Каждый из них будет отвечать за соответствующий шаблон, поэтому настраиваем их, так как хочется, а в основном single.php убираем всё, заменив на:
post;
if ( in_category('1') ) {
include(TEMPLATEPATH . '/single_auto.php');
} elseif ( in_category('2') ) {
include(TEMPLATEPATH . '/single_moto.php');
} else {
include(TEMPLATEPATH . '/single_other.php');
}
?>
Номера категорий соответственно ваши.
Отдельные шаблоны для разных рубрик
С шаблонами рубрик (т.е. оформлением страницы при просмотре всех постов в определенной рубрике) всё намного проще. Если хочется, чтобы при переходе в рубрику все посты выводили как-то “особо”, то создаём в папке темы файл category-2.php, в котором и делаем это “особое оформление”. Теперь если кто-то зайдёт в рубрику под номером 2, то подгрузится данный шаблон и будет сплошная красота. Формат имени файла “category-НомерРубрики.php”.
Вешаем баннер после первого поста
Частенько возникает желание расположить баннер или блок контекстной рекламы сразу после первого поста. Как это сделать? Открываем файл index.php шаблона и добавляем переменную, которая будет отсчитывать номер поста. Выглядит это так:
Находим блок окончания цикла (<?php endwhile;?>) и вставляем перед ним:
В файл ad.php сохраняем код баннера или той же сапы.
На этом закончу первую часть руководства. Надеюсь, вы почерпнули что-то новое и полезное.
Хотелось бы понять насколько доступно то, что изложено в посте, какие коррективы стоит внести и что более полно разъяснить. Поэтому не стесняйтесь - комментируйте.
В следующей части я расскажу о query_posts, что это и как, используя эту функцию, можно управлять последовательностью вывода постов, так же расскажу о “Произвольных полях”, покажу как очень просто сделать карту сайта и возможно что-то ещё. Подписывайтесь на rss, чтобы ничего не пропустить.
Из той же оперы, так что прочти обязательно:
Метки: coding, guide, howto, template, WordPress, руководство, темы, шаблоны
40 комментариев на “Извращения с темами WordPress для новичков и не только (Часть 1)”
Оставить комментарий
Вы должны войти чтобы оставить комментарий.

19 октября 2007 в 15:44
все доступно и понятно, спасибо
19 октября 2007 в 15:58
Вам спасибо за отзыв.
19 октября 2007 в 17:20
Спасибо, интересно
19 октября 2007 в 22:06
хорошая статья. Спасибо.
20 октября 2007 в 22:59
а существует возможность как то задавать условия для видимости виджетов в сайдбаре?
21 октября 2007 в 9:27
И ксати, как продвигаются дела, по переводу статьи, про адаптацию тем под вордпресс 2.3 ?
22 октября 2007 в 17:22
Спасибо. Очень хороший пост
22 октября 2007 в 18:26
masterL, возможно есть и более простой способ, но думаю условия видимости можно реализовать через переопределение вижетов в function.php темы.
Статью в течении пары недель думаю перевести, сейчас немного занят сторонними проектами и осваиванием плагинов.
24 октября 2007 в 22:39
Спасибо за хороший пост и стиль.
У меня к вам вопрос, возможно вы знаете ответ.
Каким шаманствм в ленту RSS можно добавить custom fields?
Спасибо.
24 октября 2007 в 23:08
Попробуйте плагин Better Feed, если он не поддерживает работу с произвольными полями, то я думаю она в него легко добавляется.
25 октября 2007 в 21:56
Спасибо, с нетерпением жду следующих постов!
30 октября 2007 в 3:13
Спасибо, особенно понравилось “Отдельные шаблоны для разных рубрик”
и “Вешаем баннер после первого поста”.
Ща пойду другие части почитаю. Я сейчас с WP эксперементирую вот тут dezignus.com но в основном функциюнал плагинами расширяю… поэтому со временем вылазиют всякие несоответствия, а мозгов в пхп коде править еще не хватает, надеюсь прокачаю у тебя на блоге свой моск
30 октября 2007 в 13:36
Очень все грамотно написано. Все попробовал. Почти все вышло, кроме выделения в меню того места где нахожусь. Наверно из-за того что у меня стандартный виджет стоит. Это при том, что я PHP 3 раз в жизни увидел и второй раз попробовал на нём писать благодаря этому посту. Спасибо.
P.S. я вообще занимаюсь промышленным программированием ни С/C ? так что не совсем лох
30 октября 2007 в 15:35
Stas, всегда пожалуйста. Мозг - полезная штука)
Дмитрий, я и сам раньше писал на C/C , потом пришлось на Delphi уйти, но тут главное “мыслить правильно”, а уж вся прелесть синтаксиса C, в том, что он же и в Php и в Java-script применяется, так что переучиваться не придётся, только спец.функции учить и объектную модель.
2 ноября 2007 в 11:31
Спасибо за статью.
Особенно про баннер после поста.
2 ноября 2007 в 20:08
Ну не получается код сапы вставить, ну хоть ты тресни: не появляется он после первого поста:(
2 ноября 2007 в 20:13
Всё, ссылки появились, но опять кодировка не та, я использовала код, приведенный разработчиками сапы:
Мой сайт использует кодировку UTF-8 (или любую другую), будут ли ссылки корректно отображаться?
Если на Вашем сайте используется кодировка русских букв, отличная от windows-1251, то необходимо в коде вывода ссылок (который вы вставляете на каждую страницу сайта) строку:
$sape = new SAPE_client();
изменить на:
$o['charset'] = ‘UTF-8′;
$sape = new SAPE_client($o);
unset($o);
Строчку изменила, а никакого толку((((((((
3 ноября 2007 в 12:52
Попробуйте удалить файл links.db из папки с сапой, он автоматически пересоздастся. Но не уверен, что это поможет. Если всё так же и останется - отпишитесь тут и поищем другие варианты.
4 ноября 2007 в 13:45
Тарас, после того, как я сменила админку сайта, я, как полагается, обновила и код сапы.
Хм… Сейчас удалила links.db… Проблема осталась:(
4 ноября 2007 в 13:55
Спасибо за статью, обязательно попробую что-нибудь из предложенного. Творческого Вам вдохновления
4 ноября 2007 в 13:59
О…да, кстати. Тарас, объясните чайнику, что с моим блогом http://www.dagadgets.com? в чем проблема? Потемнел резко :)) что нужно мне сделать, чтобы исправить это? поменять движок, шаблон или в чемто другом проблема? сайтик подзаброшен немного….вот хочу его немного разгребсти. Заранее большое спасибо!
4 ноября 2007 в 15:05
Vasgur, спасибо за пожелание. А с сайтом - посмотрите в файле style.css в разделе body стиль “background-color”. У него стоит тёмно серый (#333333) цвет. Измените на что-нибудь поярче. Должно помочь.
25 ноября 2007 в 22:27
Спасибо за “вставку рекламы после первого поста”
17 декабря 2007 в 2:13
Спасибо большое! Давно хотел попробовать разместить рекламу от ЯндексДиректа между постами. -)
11 января 2008 в 4:16
к сожаления вставка кода под первый пост не работает
ошибка:
Parse error: parse error, unexpected $end in y:\home\test1.ru\www\blogg\bb\wp-content\themes\iphones\header.php on line 170
11 января 2008 в 4:18
к сожаления вставка кода под первый пост не работает
ошибка:
Parse error: parse error, unexpected $end in
11 января 2008 в 14:28
Вадим, в какой файл вы вставляли код?
11 января 2008 в 18:33
пробовал в разных. и в индексе, и в начале, и в конце, и в хеадере, ничего не помогает, ошибка одна и та же.
11 января 2008 в 18:36
имееется ввиду первую часть кода.
<?php if ($loopcounter вставлял как и написано перед ()
14 января 2008 в 2:41
Попробуйте постучаться в аську 232720006, если проблема ещё не решилась, возможно удастся помочь.
20 января 2008 в 7:41
Никак не получается сделать ЧПУ.
20 января 2008 в 16:34
Здравствуйте! Спасибо вам за ваш блог. Очень нужный!
21 января 2008 в 10:13
Кот, в чём именно проблема?
Олег, пожалуйста, стараюсь изо всех сил)
13 февраля 2008 в 14:59
хорошо написал. особенно актуален пункт с развешиванием баннера после поста. я как раз это искал. намерен адсенс подвесить…
27 февраля 2008 в 19:24
Спасибо, все получилось.
14 июня 2008 в 0:14
http://www.christianschenk.org/projects/wordpress-smoothgallery-plugin/integration-into-your-theme/
Не могу подключить к вордпрессу эту галлерею. Смотрю вы грамотные ребята, можем спишемся? Поможете? Загвоздка с if (is_page(’42′)) {
return array(’width’ => 96,
17 июля 2008 в 16:27
СПАСИБО ОГОРОМНОЕ !!!!
16 августа 2008 в 18:27
Привет.
Не совсем понял:
“Находим блок окончания цикла () и вставляем перед ним:
В файл ad.php сохраняем код баннера или той же сапы.”
Что вставлять то надо? В статье не указано
29 августа 2008 в 18:25
всё круто, только везде, где вы отображаете код - пустое место во всех браузерах. Исправьте плиз - кое-что нужно из того, что сказано.
8 сентября 2008 в 10:04
здравствуйте, в фаир фоксе не видно кодов которые надо вставлять в шаблон:(