Рекламные кампании для вашего бизнеса
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:

Правка шаблонов WordPress своими руками: для блогов и сателлитов

Россия +7 (495) 960-65-87
Шрифт:
0 4009

1. Введение
2. Тэги условий
3. Размещение баннера после первого сообщения
4. Query Posts
5. Произвольные поля
6. WordPress List Pages
7. Карта сайта (Sitemap)
8. Шаблоны для страниц

1. Введение

Интересно, есть ли ещё люди, сомневающиеся в том, что на WordPress можно сделать сайт практически любой сложности, сохранив при этом удобство управления контентом через стандартную административную систему?
Можете не отвечать, знаю: хватает людей, которые строят кислую мину при упоминании, что сайт работает на WP: "Это же блоговый движок, все сайты на нём одинаково шаблонные".
Шаблонные, конечно, но попрошу рассматривать этот факт не как минус, а как огромный плюс, потому что это означает лишь то, что пользователь может сам настроить всё именно так, как хочется - расположить элементы, определить условия вывода данных и многое-многое другое.
Для понимания потребуются минимальные знания php, редактор (можно и в блокноте), сам WordPress и желание творить.

2. Тэги условий

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

А) «Подсветка» в меню текущей страницы

Предположим, у нас есть 3 страницы "Обо мне", "О блоге", "Контакты" (короткие имена about/bloginfo/contacts), отображаемые в меню, и мы хотим, чтобы при нахождении на одной из этих страниц, соответствующий пункт меню был подсвечен или как-нибудь по-другому выделен. Для этого в style.css мы создаём класс .current, которому задаём то, как хотим "подсветить" пункт меню.
То, на какой странице мы находимся, определяется при помощи функции is_page(), в которую передаётся короткое имя страницы. Если короткое имя соответствует текущей странице, то возвращается true и выполняется условие, идущее в фигурных скобках.

В качестве примера меню, сделанное в виде списка.

<ul id="nav">
<li/upload/masterclasses/b> if(is_home() is_category() is_archive()
is_search() is_single() is_date())
{echo ' class="current"';}?>>< a href="#">Главная</a></li>
<li/upload/masterclasses/b> if(is_page('about'))
{echo ' class="current"';}?>>< a href="#">Обо мне</a></li>
<li/upload/masterclasses/b> if(is_page('bloginfo'))
{echo ' class="current"';}?>>< a href="#">О блоге</a></li>
<li/upload/masterclasses/b> if(is_page('contacts'))
{echo ' class="current"';}?>>< a href="#">Контакты</a></li></ul>

Если у вас другой вариант реализации меню - действуйте по аналогии. Учтите, что когда мы находимся на любой другой странице, то у нас подсвечен будет первый пункт - "Главная".

Б) Выделение постов определенной рубрики

Если появилось желание каким-то особым способом пометить пост из определенной рубрики, то открываем index.php своей темы (не перепутайте его с одноименным файлом в корне сайта), находим строчку похожую на

<div class="post" id="post-/upload/masterclasses/b> the_ID(); ?>">

и модифицируем её до вот такого вида

<div class="post/upload/masterclasses/b> if( in_category('5') ){echo (' feature');}?>" id="post-/upload/masterclasses/b> the_ID(); ?>">

Теперь всем постам из «рубрики № 5» (номера можно посмотреть в разделе "Управление > Рубрики") будет дополнительно присвоен класс "feature". Тут стоит отметить, что перед "feature" обязательно должен стоять пробел, чтобы классы не "склеились". Осталось только придумать и описать в стилях (style.css) соответствующий класс.

В) Отдельные шаблоны

1) для постов из разных рубрик

Сделаем для каждой рубрики разное оформление страницы при отображении поста. Пусть в рубрике "авто" будет на фоне машина и сайдбар слева, а в рубрике "мото" разместим мотоцикл и сайдбар справа.
Получается, нам потребуется 3 шаблона: мото, авто и по умолчанию.Копируем файл single.php из своей темы три раза и называем файлы single_auto.php, single_moto.php, single_other.php.
Каждый из них будет отвечать за соответствующий шаблон, поэтому настраиваем их, так, как хочется, а в основном single.php убираем всё, заменив на:

< ?php
$post = $wp_query->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');
}
?>

Номера категорий, соответственно, ваши.
2) для рубрик

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

3. Размещение баннера после первого сообщения

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

< ?php while (have_posts()) : the_post(); $loopcounter++; ?>

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

< ?php if ($loopcounter <= 1)
{ include (TEMPLATEPATH . '/ad.php'); } ?>
В файл ad.php сохраняем код баннера или той же сапы.

4. Query Posts

Хотелось ли вам самим определять, какие сообщения и когда должны показываться на странице? Нет ничего проще, ведь существует чудо функция query_posts, определяющая, какие записи попадут в выдачу. Функция работает как некий фильтр, отбирающий посты по указанным критериям.

А) Вывод последних записей списком

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

/upload/masterclasses/b> query_posts('showposts=5'); ?>
<ul>
/upload/masterclasses/b> while (have_posts()) : the_post(); ?>
<li>< a href="/upload/masterclasses/b> the_permalink() ?>">
/upload/masterclasses/b> the_title(); ?></a></li>
/upload/masterclasses/b> endwhile;?>
</ul>

Как видно из кода, мы передали в функцию query_posts параметр showposts, равный 5. Даже не будучи особым знатоком английского языка, можно понять, что будут показаны 5 постов. Сортируются они по умолчанию по дате публикации: от последних к первым. The_permalink() даёт нам ссылку на пост, а the_title() - заголовок.

Б) Вывод N-постов из определенной рубрики

Если необходимо выводить 5 последних постов из категории с ID 2.

/upload/masterclasses/b> query_posts('cat=2&showposts=5'); ?>
<ul>
/upload/masterclasses/b> while (have_posts()) : the_post(); ?>
<li>< a href="/upload/masterclasses/b> the_permalink() ?>">
/upload/masterclasses/b> the_title(); ?></a></li>
/upload/masterclasses/b> endwhile;?>
</ul>

Всего 6 знаков, а какой эффект.

В) Исключаем записи из вывода

Допустим, существует некая категория (для примера, с ID = 3), посты которой не хочется выводить на главной, для этого мы мановением чудо-символа "-" (минус) убираем её из выдачи.

/upload/masterclasses/b> query_posts('cat=-3'); ?>
/upload/masterclasses/b> while (have_posts()) : the_post(); ?>
// тут стандартный вывод/upload/masterclasses/b> endwhile;?>

Перечень доступных параметров


Думаю, вы оценили прелесть этой небольшой, но мощной функции query_posts, и хотя вы всегда можете более глубоко изучить её в кодексе, я позволю себе перечислить параметры, которые могут вам пригодиться:
cat и category_name - выбор рубрики по ID или по имени

Хинт используется, если нужно передать несколько рубрик, чтобы не писать несколько cat=1&cat=2, а просто перечислить рубрики через запятую cat=1,2. Этот приём относится к любому параметру, который может принимать несколько значений.
author и author_name - посты определенного автора, по ID (author=3) и имени (author_name=Tapac).
p и name выбирает посты по id (p=5) или по короткому имени (name=this_post_slug).
page_id и pagename то же, что и предыдущее, но применительно к страницам;
showposts - сколько из отфильтрованных постов/страниц показать при выдаче.
hour, minute, second, day, monthnum, year (временные) - посты за указанный период;
paged позволяет показывать те посты, которые в обычном случае доступны при переходе по ссылкам "предыдущая страница", т.е. paged=2 покажет посты, как если бы мы отмотали на 2 страницы в прошлое (при выводе по 10 постов на странице, мы получили бы в выдаче записи с 21 по 30);
posts_per_page - сколько постов на страницу. Хорошо группируется с предыдущим параметром.
order - порядок сортировки по дате, принимает значения ASK(от старых к новым) или DESC (от новых к старым;стоит по умолчанию).
offset - отступ. Пропускает (сдвигает) на определенное количество записей.

5. Произвольные поля

"Произвольные поля" (или Custom Fields в англ. версии), позволяют добавлять к посту/странице "скрытую" информацию любого (текстового) вида, а потом обрабатывать её при выводе. Обратимся к конкретным примерам.

А) Добавляем "Настроение" и "Слушает"

Пишем пост и прокручиваем страницу до раздела «Произвольные поля», после чего вбиваем в название поля: «Настроение», а в текст поля «Фиговое», таким же манером добавляем "Музыка" и то, что у вас сейчас играет.
В нужном файле темы (думаю, вы уже запомнили, что файл index.php отвечает за внешний вид главной, single.php - посты, page.php - страницы, search.php - поиск и т.д.), в любом месте добавляем:

/upload/masterclasses/b> the_meta() ?>

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

<ul class="post-meta">
<li><span class="post-meta-key">Настроение:</span>Хреновое</li>
<li><span class="post-meta-key">Музик:</span>KMFDM - Attak-Reload</li>
</ul>
Соответственно, через css можно настроить стиль списка.
Получилось скучнова-то, но это пример, чтобы показать возможность вывода этих полей в теле поста. Теперь попробуем отобразить не текст, а картинку, путь к которой будет указан в одном из произвольных полей.

Б) Вставка изображения со ссылкой на пост
Сперва создадим произвольное поле article_image и укажем в нём полный путь до изображения.

В теме же вставим следующий код:

/upload/masterclasses/b> $image = get_post_meta($post->ID, 'article_image', true); ?>
< a href="/upload/masterclasses/b> the_permalink() ?>">
<img src="/upload/masterclasses/b> echo $image; ?>" alt="/upload/masterclasses/b> the_title(); ?>" />
</a>
Тут требует пояснения одна функция - get_post_meta();. В неё передаётся три параметра: первый - ID поста, данные о котором мы хотим получить, второй - название произвольного поля, третий - принимает значения true или false и определяет - получать в результате одно значение или несколько. При помощи $post->ID мы передаём ID текущего поста и соответственно "вынимаем" данные из поля.

6. WordPress List Pages

По своим свойствам wp_list_pages() немного напоминает wp_list_categories(), который упоминался выше, работает не с рубриками, но и со страницами (заметьте, не с постами). У него также есть параметры include/exclude, управляющие выводом определенных страниц по ID, сортировка при помощи sort_column и многие другие. Отмечу только, пожалуй, параметр depth, который определяет глубину списка при выводе:
0 - все страницы и подстраницы в виде иерархического дерева;
-1 - все страницы и подстраницы в виде ненумерованного списка;
1 - только страницы верхнего уровня иерархии;
2 и больше - указанный уровень вложенности.

7. Карта сайта (Sitemap)

Блогу, как таковому, карта сайта без надобности, потому что это будет просто список постов, а вот если делать, например, сайт-сателлит, со статичным набором страниц и несколькими уровнями вложений (Главная > Информация > Актёры > Актёр), то будет неплохо иметь страницу, с которой можно было бы попасть на любую другую. И поисковики будут довольны - любая страница в 3 клика.

<ul>
/upload/masterclasses/b> wp_list_pages('exclude=10&title_li=' ); ?>
</ul>
Данный код выведет нам список всех страниц и подстраниц, кроме 10-ой, которая и является самой "Картой сайта".
Куда поместить этот код? Терпение. Дочитайте до конца и узнаете, как назначать отдельным страницам отдельные шаблоны.
Подчеркну, что речь идёт не о google-sitemap, который полезен и блогам, для более качественной индексации.

8. Шаблоны для страниц

Для тех, кто использует WordPress не как блог-платформу, а как CMS, это довольно полезное знать.
Сейчас вы будете приятно удивлены тем, как всё оказывается просто:
1. Заходим в папку своего шаблона и создаём php файл с любым именем (я сделал себе stats.php)
2. Открываем его в редакторе и вставляем следующий код

/upload/masterclasses/b>
/*
Template Name: Stats
*/
?>
/upload/masterclasses/b> get_header(); ?>
//Любой код, у меня стоит
/upload/masterclasses/b> echo fs_get_stats_box(); ?>
/upload/masterclasses/b> get_footer(); ?>

3. Открываем в административной панели ту страницу, которой хотим назначить шаблон и выбираем его в правом меню.

Всё, теперь у вас при вызове этой страницы будет применяться именно выбранный шаблон.

Главное аккуратно скопировать первый блок /upload/masterclasses/b> ... ?> и назначить имя.Часто встречал людей, которые задавали один и тот же вопрос: Как сделать так, чтобы на главной показывалась какая-нибудь другая страница, а не список постов?
И, как всё гениальное, это сделать достаточно просто. Идём в Настройки > Чтение, а дальше всё видно на картинке.

Андрей Тарашевский aka Тарас - Блог о Wordpress

internet-dlya-biznesa

Есть о чем рассказать? Тогда присылайте свои материалы в редакцию.


Новые 
Новые
Лучшие
Старые
Сообщество
Подписаться 
Подписаться на дискуссию:
E-mail:
ОК
Вы подписаны на комментарии
Ошибка. Пожалуйста, попробуйте ещё раз.
Поделиться 
Поделиться дискуссией:
Отправить отзыв
ПОПУЛЯРНЫЕ ОБСУЖДЕНИЯ НА SEONEWS
23 действительно эффективных совета по продвижению интернет-магазина
Гость - Троль Гуру паНгинации - Что такое паНгинация?))))
Конкурс: угадайте пятерку лидеров рейтинга «SEO глазами клиентов 2016»
Марина
1
комментарий
0
читателей
Полный профиль
Марина - Ingate i-Media SEO.RU Netpeak 1PS.RU
Анализ ссылок: сравнение многофункциональных платформ по размеру их баз
Михаил - Хватит пениться на каждый аргументированный отзыв. Это не придает вашей компании чести.
Как создать интернет-магазин: сколько стоит открытие?
Гость - да у битрикса что ни обновление - то сплошные баги. недавно знакомый обновился на лицензии интернет-магазина, про***лись заказы за последнюю неделю, слетели все связи по складам. одним словом, жопа. при этом обновился на сразу, а спустя месяц после выкатывания, надеялся, успеют все поправить
Как упростить продвижение вечными ссылками?
Coursh - Зарегестрировался. Накинули 1100 рубликов за пополнение на 10к. Очень неплохо!
Вопрос недели: почему сайт хорошо ранжируется в Google и не интересует Яндекс?
Nina S.Dzh. - У вас достаточно конкурентная тематика для рунета и по главной странице домена расположена англоязычная версия. Полагаю, в этих двух фактах вся проблема. Поскольку Яндекс в данном случае считает английскую версию сайта приоритетной, а среди ваших конкурентов в выдаче достаточно много хороших русскоязычных сайтов, то он и не ранжирует ваш сайт высоко. Грубо говоря, ему есть что предложить пользователю и без вашего сайта. На мой взгляд, в данном случае версии нужно разводить по разным доменам, русскую вешать на RU и продвигать там.
Кому и зачем нужен маркетплейс от Яндекса
Дарья Калинская
203
комментария
0
читателей
Полный профиль
Дарья Калинская - Максим, спасибо, рада, что статья оказалась полезной )
Конкурс: угадай победителя рейтинга «Известность бренда SEO-компаний»
Андрей
1
комментарий
0
читателей
Полный профиль
Андрей - Оптимизм Дэмис Кокос Ашманов и Партнеры Раш эдженси
ТОП-10 автоматизированных сервисов контекстной рекламы
Жанна Рожкова
155
комментариев
0
читателей
Полный профиль
Жанна Рожкова - Научитесь отличать рекламу от PR-активности. Если следовать вашей логике, на этом сайте (и на всех остальных информационных ресурсах в принципе) кроме рекламы ничего и нет. Так что насчет статьи от понимающего эксперта? Будем рады, если подготовите
Экспериментальное SEO: «Дырявые носочки панды»
Adrian - Испания и Португалия находятся в Европе и участвовали в чемпионате Европы. Одна из этих стран даже стала победителем. А Южная и Центральная Америка здесь при том, что там разговаривают на испанском и португальском языках. Сына, учите географию.
ТОП КОММЕНТАТОРОВ
Комментариев
910
Комментариев
834
Комментариев
554
Комментариев
540
Комментариев
483
Комментариев
373
Комментариев
285
Комментариев
262
Комментариев
203
Комментариев
171
Комментариев
155
Комментариев
137
Комментариев
123
Комментариев
97
Комментариев
97
Комментариев
93
Комментариев
80
Комментариев
70
Комментариев
67
Комментариев
60
Комментариев
55
Комментариев
52
Комментариев
49
Комментариев
45
Комментариев
44

Отправьте отзыв!
Отправьте отзыв!