Выпуск 12. Особые страницы шаблона
Немного задержал выпуск рассылки... Нужно сделать большой заказ... А тут еще и море: чистое и прозрачное как стеклышко, водичка просто супер, солнышко уже не жарит, а греет ровно как нужно - все эти соблазны, да навалившаяся куча работы просто не позволяют отимально распределить время.
Ну да ладно, скоро лето кончится и рассылка будет выходить почаще.
Особые страницы шаблона
Иногда нужно каким-то образом подключить к шаблону свою особую страницу, например какой-либо php-скрипт. То есть вам не достаточно воспользоваться static page, поскольку на ней нельзя выполнить PHP-код.
Эту задачу в принципе можно решить несколькими способами. Например подключить свой файл как плагин и "повесить" фильтр (hook) на нужное событие. Но есть решение несколько попроще и, как мне кажется, более управляемое.
Задача, которую предстоит решить - это каким-то образом заставить WordPress "подключить" наш файл (назовем его file.php - его необходимо поместить в каталог шаблона).
Поскольку WordPress изначально использует файл index.php (или home.php, но обычно его не используют), то откроем его и в самом-самом начале напишем код:
<?php
if ($_GET['file'] == 1) {
include ( TEMPLATEPATH . '/file.php' );
exit;
}
?>
Следующий код в шаблоне (обычно <?php get_header(); ?>) должен находиться сразу после вышепреведенного без пробелов. Если этого не сделать, то WordPress может выдавать сообщение об ошибке "header".
Этот код делает очень простую вещь. Он смотрит глобальный массив _GET, в котором хранятся все переменные и их значания переданные через строку браузера.
Например: http://сайт/index.php?file=1&drugoe=2 - если вы сформируете таким образом строку запроса в браузере, то массив _GET будет содержать элемент "file" равный "1" и "drugoe" равный "2".
Таким образом, для того, чтобы обратиться к особой странице нам нужно сформировать ссылку вида: http://сайт/?file=1
Здесь не желательно использовать в качестве названия параметра ("file") зарезервированные имена и имена уже существующих рубрик, поскольку, если вы используете ЧПУ, может произойти неверная адресация.
Как сформировать такую ссылку? Можно конечно её жестко прописать, но, если вы будете менять шаблоны или адрес сайта (например тестировать на localhost), то это будет просто неудобно. Поэтому мы заставим WordPress самостоятельно указывать адрес сайта:
<a href="<?php bloginfo('url'); ?>/?file=1">Наша ссылка</a>
Практика
Чтобы закрепить полученные знания давайте для примера сделаем отдельную страничку для вывода всех рубрик единым списком.
Вначале сделайте копию index.php и сохраните её как all_rubr.php.
Откроем index.php и в самое начало запишем:
<?php
if ($_GET['all_rubr'] == 1) {
include ( TEMPLATEPATH . '/all_rubr.php' );
exit;
}
?>
После этого откроем файл, где будет указана наша ссылка на страницу, например в sidebar.php. Пишем:
<a href="<?php bloginfo('url'); ?>/?all_rubr=1">Все рубрики</a>
Теперь открываем файл all_rubr.php. Удалите все строчки, которые отвечают за вывод записей и оставьте только "каркас". Добавьте примерно такой код:
<h1 class="storytitle">Все рубрики</h1>
<div class="storycontent">
<ul>
<?php
wp_list_cats('sort_column=menu_order&optioncount=1&hide_empty=0');
?>
</ul>
</div>
Естественно у вас могут оказаться другие названия css-классов. Также вы можете изменить параметры wp_list_cats (вы можете её просто скопировать из своего sidebar.php).
Преимущества
Самое главное преимущество такого метода заключается в том, что в подключаемом файле становятся доступны все функции и установленные плагины. Это очень важно, поскольку вам не придется придумывать различные хитрости, чтобы получить к ним доступ.
Возьмем для примера плагин для голосований Democracy. Чаще всего его "вешают" в сайдбар. Но можно и просто сделать отдельную страничку голосований. В этом случае вам и пригодится предложенный мной способ.
Можно улучшить
Вы можете модифицировать обработку _GET, чтобы использовать одно имя параметра, но с разными значениями. Это пригодится, если у вас будет несколько своих страниц и ссылаться на них можно будет так:
<a href="<?php bloginfo('url'); ?>/?mypage=1">Файл1</a>
<a href="<?php bloginfo('url'); ?>/?mypage=2">Файл2</a>
<a href="<?php bloginfo('url'); ?>/?mypage=3">Файл3</a>
<a href="<?php bloginfo('url'); ?>/?mypage=4">Файл4</a>
Тогда в index.php:
<?php
if ($_GET['mypage'] == 1) {
include ( TEMPLATEPATH . '/file1.php' );
exit;
}
if ($_GET['mypage'] == 2) {
include ( TEMPLATEPATH . '/file2.php' );
exit;
}
if ($_GET['mypage'] == 3) {
include ( TEMPLATEPATH . '/file3.php' );
exit;
}
if ($_GET['mypage'] == 4) {
include ( TEMPLATEPATH . '/file4.php' );
exit;
}
?>
Думаю, понятно.
Добавьте свой сайт
И напоследок информация для тех, кто может просто ещё не в курсе. На форуме поддержки WordPress вы можете добавить информацию о своем сайте. Все бесплатно.
Постоянная ссылка: http://maxsite.org/?p=90
Версия для печати
RSS: Выпуск 12. Особые страницы шаблона

