Извращения с темами 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 убираем всё, заменив на:

Номера категорий соответственно ваши.

Отдельные шаблоны для разных рубрик

С шаблонами рубрик (т.е. оформлением страницы при просмотре всех постов в определенной рубрике) всё намного проще. Если хочется, чтобы при переходе в рубрику все посты выводили как-то «особо», то создаём в папке темы файл category-2.php, в котором и делаем это «особое оформление». Теперь если кто-то зайдёт в рубрику под номером 2, то подгрузится данный шаблон и будет сплошная красота. Формат имени файла «category-НомерРубрики.php».

Вешаем баннер после первого поста

Частенько возникает желание расположить баннер или блок контекстной рекламы сразу после первого поста. Как это сделать? Открываем файл index.php шаблона и добавляем переменную, которая будет отсчитывать номер поста. Выглядит это так:

Находим блок окончания цикла (<?php endwhile;?>) и вставляем перед ним:

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


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

В следующей части я расскажу о query_posts, что это и как, используя эту функцию, можно управлять последовательностью вывода постов, так же расскажу о «Произвольных полях», покажу как очень просто сделать карту сайта и возможно что-то ещё. Подписывайтесь на rss, чтобы ничего не пропустить.

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

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

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

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

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

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

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

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

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

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

    $sape = new SAPE_client();

    изменить на:

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

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

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

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

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

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

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

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

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

Добавить комментарий