Извращения с темами 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> .


<?php
if (is_home()) {
	echo bloginfo('name');
} elseif (is_404()) {
	echo '404 Страница не найдена';
} elseif (is_category()) {
	echo 'Рубрика:'; wp_title('');
} elseif (is_search()) {
	echo 'Результаты поиска';
} elseif ( is_day() || is_month() || is_year() ) {
	echo 'Архив:'; wp_title('');
} else {
	echo wp_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, чтобы ничего не пропустить.

Из той же оперы, так что прочти обязательно:

Метки: , , , , , , ,

40 комментариев на “Извращения с темами WordPress для новичков и не только (Часть 1)”

  1. heckfy пишет:

    все доступно и понятно, спасибо :)

  2. Tapac пишет:

    Вам спасибо за отзыв.

  3. Aesma пишет:

    Спасибо, интересно :)

  4. Artem Krotkov пишет:

    хорошая статья. Спасибо.

  5. masterL пишет:

    а существует возможность как то задавать условия для видимости виджетов в сайдбаре?

  6. masterL пишет:

    И ксати, как продвигаются дела, по переводу статьи, про адаптацию тем под вордпресс 2.3 ?

  7. Дмитрий пишет:

    Спасибо. Очень хороший пост

  8. Tapac пишет:

    masterL, возможно есть и более простой способ, но думаю условия видимости можно реализовать через переопределение вижетов в function.php темы.
    Статью в течении пары недель думаю перевести, сейчас немного занят сторонними проектами и осваиванием плагинов.

  9. Evalusion пишет:

    Спасибо за хороший пост и стиль.
    У меня к вам вопрос, возможно вы знаете ответ.

    Каким шаманствм в ленту RSS можно добавить custom fields?
    Спасибо.

  10. Tapac пишет:

    Попробуйте плагин Better Feed, если он не поддерживает работу с произвольными полями, то я думаю она в него легко добавляется.

  11. azimsky пишет:

    Спасибо, с нетерпением жду следующих постов!

  12. Stas пишет:

    Спасибо, особенно понравилось “Отдельные шаблоны для разных рубрик”
    и “Вешаем баннер после первого поста”.
    Ща пойду другие части почитаю. Я сейчас с WP эксперементирую вот тут dezignus.com но в основном функциюнал плагинами расширяю… поэтому со временем вылазиют всякие несоответствия, а мозгов в пхп коде править еще не хватает, надеюсь прокачаю у тебя на блоге свой моск

  13. Дмитрий пишет:

    Очень все грамотно написано. Все попробовал. Почти все вышло, кроме выделения в меню того места где нахожусь. Наверно из-за того что у меня стандартный виджет стоит. Это при том, что я PHP 3 раз в жизни увидел и второй раз попробовал на нём писать благодаря этому посту. Спасибо.

    P.S. я вообще занимаюсь промышленным программированием ни С/C ? так что не совсем лох

  14. Tapac пишет:

    Stas, всегда пожалуйста. Мозг - полезная штука)

    Дмитрий, я и сам раньше писал на C/C , потом пришлось на Delphi уйти, но тут главное “мыслить правильно”, а уж вся прелесть синтаксиса C, в том, что он же и в Php и в Java-script применяется, так что переучиваться не придётся, только спец.функции учить и объектную модель.

  15. Tweak Vista пишет:

    Спасибо за статью.
    Особенно про баннер после поста.

  16. Сим пишет:

    Ну не получается код сапы вставить, ну хоть ты тресни: не появляется он после первого поста:(

  17. Сим пишет:

    Всё, ссылки появились, но опять кодировка не та, я использовала код, приведенный разработчиками сапы:

    Мой сайт использует кодировку UTF-8 (или любую другую), будут ли ссылки корректно отображаться?

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

    $sape = new SAPE_client();

    изменить на:

    $o['charset'] = ‘UTF-8′;
    $sape = new SAPE_client($o);
    unset($o);

    Строчку изменила, а никакого толку((((((((

  18. Tapac пишет:

    Попробуйте удалить файл links.db из папки с сапой, он автоматически пересоздастся. Но не уверен, что это поможет. Если всё так же и останется - отпишитесь тут и поищем другие варианты.

  19. Сим пишет:

    Тарас, после того, как я сменила админку сайта, я, как полагается, обновила и код сапы.
    Хм… Сейчас удалила links.db… Проблема осталась:(

  20. Vasgur пишет:

    Спасибо за статью, обязательно попробую что-нибудь из предложенного. Творческого Вам вдохновления ;)

  21. Vasgur пишет:

    О…да, кстати. Тарас, объясните чайнику, что с моим блогом http://www.dagadgets.com? в чем проблема? Потемнел резко :)) что нужно мне сделать, чтобы исправить это? поменять движок, шаблон или в чемто другом проблема? сайтик подзаброшен немного….вот хочу его немного разгребсти. Заранее большое спасибо!

  22. Tapac пишет:

    Vasgur, спасибо за пожелание. А с сайтом - посмотрите в файле style.css в разделе body стиль “background-color”. У него стоит тёмно серый (#333333) цвет. Измените на что-нибудь поярче. Должно помочь.

  23. KPG пишет:

    Спасибо за “вставку рекламы после первого поста”

  24. aw пишет:

    Спасибо большое! Давно хотел попробовать разместить рекламу от ЯндексДиректа между постами. -)

  25. Вадим пишет:

    к сожаления вставка кода под первый пост не работает :( ошибка:

    Parse error: parse error, unexpected $end in y:\home\test1.ru\www\blogg\bb\wp-content\themes\iphones\header.php on line 170

  26. Вадим пишет:

    к сожаления вставка кода под первый пост не работает :( ошибка:

    Parse error: parse error, unexpected $end in

  27. Tapac пишет:

    Вадим, в какой файл вы вставляли код?

  28. Вадим пишет:

    пробовал в разных. и в индексе, и в начале, и в конце, и в хеадере, ничего не помогает, ошибка одна и та же.

  29. Вадим пишет:

    имееется ввиду первую часть кода.

    <?php if ($loopcounter вставлял как и написано перед ()

  30. Tapac пишет:

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

  31. Кот пишет:

    Никак не получается сделать ЧПУ.

  32. Oлег пишет:

    Здравствуйте! Спасибо вам за ваш блог. Очень нужный!

  33. Tapac пишет:

    Кот, в чём именно проблема?

    Олег, пожалуйста, стараюсь изо всех сил)

  34. старик merlin пишет:

    хорошо написал. особенно актуален пункт с развешиванием баннера после поста. я как раз это искал. намерен адсенс подвесить…

  35. Женька пишет:

    Спасибо, все получилось.

  36. Zolud пишет:

    http://www.christianschenk.org/projects/wordpress-smoothgallery-plugin/integration-into-your-theme/

    Не могу подключить к вордпрессу эту галлерею. Смотрю вы грамотные ребята, можем спишемся? Поможете? Загвоздка с if (is_page(’42′)) {
    return array(’width’ => 96,

  37. Молодой ЛЕВ пишет:

    СПАСИБО ОГОРОМНОЕ !!!! :)

  38. Олег пишет:

    Привет.
    Не совсем понял:

    “Находим блок окончания цикла () и вставляем перед ним:

    В файл ad.php сохраняем код баннера или той же сапы.”

    Что вставлять то надо? В статье не указано :(

  39. SEzam пишет:

    всё круто, только везде, где вы отображаете код - пустое место во всех браузерах. Исправьте плиз - кое-что нужно из того, что сказано.

  40. Мария пишет:

    здравствуйте, в фаир фоксе не видно кодов которые надо вставлять в шаблон:(

Оставить комментарий

Вы должны войти чтобы оставить комментарий.