Делал небольшой проект на базе движка WordPress. По некоторым причинам линк на завершённый проект не привожу. :)
Итак, что требовалось:
- Несколько статических страниц
- Несколько статических страниц второго уровня
- Две рубрики
- В центре выводится одна рубрика (анонсы), в правой колонке - заголовки второй рубрики
- В центре выводится запись первой рубрики (правая колонка - постоянно заголовки второй рубрики)
- Архив. Здесь - заголовки первой рубрики.
Вроде ничего сложного? Оказалось так и есть. Ничего сложного. Поломал голову два дня я решил этот вопрос. Итак по-порядку...
Для начала пришлось бороться с дизайнером, который понятия не имеет о div-ах, а весь дизайн сделал в table. К счастью, это всё решилось очень легко, хотя и пришлось поколдовать. Это скорее проблемы дизайна и html-кодинга, ибо бороться с дизайнерами использующими для позиционирования nbsp - можно только отрыванием рук. Другого метода мне не известно.
Для вывода категории, где мы находимся (архив, новости, другое, страницы) пришлось сделать такую структуру:
if (is_category('news')) echo "новости";
else if (is_category('mero')) echo "меры";
else if (is_category('archive')) echo "архив";
else if (is_page('about')) echo "о компании";
else if (is_singe AND in_category(1)) echo "меры";
Немного сложно? Но не забывайте ещё такой момент: бюджет программиста был очень невысок, всё писалось на коленке. :) Правильнее было бы использовать оператор switch (см. комментарии).
Идём дальше. Правая колонка имела вид:
$posts = get_posts('numberposts=5&&category=1');
foreach ($posts as $post) : ( шаблон вывода )
endforeach;
Теперь, в такой конструкции в правой колонке всегда выводились заголовки категории 1.
В центре немного сложнее. Немного выглядит сумбурно, но общую мысль понять можно... Используя is_category, is_single... Можно выяснить "где?" мы находимся и вывести соответствующее содержание. Смотреть описание этих тэгов стоит в инструкции вот тут.
if (have_posts()) :
while (have_posts()) : the_post();
if ( in_category('2') AND !is_category('mero')) { шаблон вывода тут}
else { if (is_page()) { другой вариант шаблона вывода}
if (is_category('news')) { // Выводим архив новостей
третий вариант шаблона для вывода }
if (is_category('mero')) { // Выводим архив новостей
... тут аналогично.
UPDATE. Немного сократил первоначальный пост, но так понятнее.
"Для вывода категории, где мы находимся" красивее было бы использовать "switch", а не "if". Дальше не осилил хитросплетение кода :)
ОтветитьУдалитьСогласен на 200%...
ОтветитьУдалитьНо если принять во внимание два пункта
1. Страницы добавлялись внезапно и обещались исчезнуть
2. Время когда мне об этом сообщалось колебалось от 23 до 4 часов :)
Да, я согласен, даже думал убрать. И сделать через switch, но потом проект захлестнул волной и было не до этого
а у меня два вопроса или даже предложение других решений этих проблем :-)):
ОтветитьУдалить1. почему было не использовать для названия категорий русские слова, тогда бы без всяких if обошлось бы
2. для вывода постов одной конкретной категории можно еще просто создавать страницу category-#id.php и помещать ее папку с темой. (#id - это id категории, которое всегда можно посмотреть в админке) WordPress перед выводом категории сначала ищет как раз такой файл, потом, если не находит, идет в файл category.php, если там нет описанного случая, то archive.php, а потом уже и вовсе index.php
Хотя, Вы наверное и так все знаете, я на всякий случай пишу, вдруг кто будет сталкиваться с подобными проблемами и случайно это увидит :-))
Спасибо, yantar! Отвечаю по пунктам:
ОтветитьУдалить1. if-ы не потому что "echo". В примере я немного упростил, там сложнее идёт процесс, а это - упрощение.
2. Как-то не знал о category-#id... Спасибо! :) в следующий раз буду так юзать.
На мой взгляд, документация не очень удобная к вордпрессу. Читать её от корки до корки, чтобы быть в курсе - немного неправильно. А найти сразу, то что нужно - сложно :)
Ещё раз спасибо за советы!
что касается документации - абсолютно согласна
ОтветитьУдалитьа мне вот очень помогло, что Вы привели кусок кода с get_posts, эта функция мне была неизвестна
так что тоже большое спасибо! :-)
Пожалуйста, yantar! ;-) жаль, что вы не оставили ссылку на свой блог.
ОтветитьУдалитьЕсли вы знаете что-либо интересное из кухни вордпресса - поделитесь, будет полезно и интересно! :)
я в первом комменте оставляла :-) мой блог как раз содержит всякое брюзжание по поводу несовершенства вордпресса и попытки это несовершенства исправить :-)
ОтветитьУдалить