WordPress: Создаем персональные страницы
Перед тем как приступить к разработке личных дневников для сайта rybalka.tv нужно было определится в каком формате были бы ссылки. В голове крутились 2 варианта.
Либо:
http://lnx.rybalka.tv
Либо:
http://rybalka.tv/users/lnx/
Сам я больше склонялся к второму варианту, но все же, немного сомневаясь задал вопрос на searchengines.ru. Ответов не много, но меня они убедили остановится на втором варианте.
Дальше дело было за технической стороной. И по началу возникли трудности.
В прошлом посте я писал о том как сделать в wordpress страницу с индивидуальным шаблоном, но увы… этот способ не подходит для моей задумки.
Для начала я хочу предложить пользователям сайта:
- Вести личный дневник. Ссылка вида: http://rybalka.tv/users/lnx/blog/
- Создавать отчеты о рыбалке. Ссылка вида: http://rybalka.tv/users/lnx/foto/
- Писать собственные статьи. Ссылка вида: http://rybalka.tv/users/lnx/articles/
К сожалению техника индивидуальных шаблонов не подходит в моем случае, потому как wordpress по запросу http://rybalka.tv/users/lnx/blog/ (где users — инд. страница) сгенерирует 404 ошибку. Да… можно пожертвовать красивыми ссылками, и использовать ссылки с GET запросами вида:
http://rybalka.tv/users/?u=lnx&action=blog
http://rybalka.tv/users/?u=lnx&action=foto
http://rybalka.tv/users/?u=lnx&action=articles
Но как говорится они нынче не в моде… всем подавай ЧПУ
Так как же быть?
Такой же вопрос я задал себе и полез в исходники wordpress. Задача была следующая: найти код, в котором wordpress анализирует запросы и делает соответствующий вывод. Например при запросе /feed/ — вывод RSS ленты, или при запросе главной страницы — вызов функции get_home_template()
Файл который занимается этим называется template-loader.php.
В самом начале стоит хук-функция
do_action('template_redirect');
if ( is_robots() ) {
do_action('do_robots');
return;
} else if ( is_feed() ) {
do_feed();
return;
} else if ( is_trackback() ) {
include(ABSPATH . 'wp-trackback.php');
return;
т.е. можно написать плагин, но к сожалению из плагина никак нельзя прервать дальнейшее выполнение кода в template-loader.php (если не прервать, будет выдана 404 ошибка), потому я позволил себе то, что дисциплинированый программист не должен позволять, а именно влезть в чужой код.
Мне всего-лишь нужно было в самом начале сделать проверку на соответствие запрашиваемой у ВП ссылки маске «/\/users\/?.*/» и в случае если урл подходит — загрузить мой шаблонный файл users.php и передать ему управление.
Вот как стало выглядеть начало template-loader.php после моих модификаций:
do_action('template_redirect');
if( preg_match('/\/users\/?.*/',$_SERVER["REQUEST_URI"]) ){
if( file_exists(TEMPLATEPATH . "/users.php") ) {
include(TEMPLATEPATH . "/users.php");
return;
}
}
Нужного эффекта я добился. Далее в файле users.php я сделаю полноценный шаблон для личных страниц, а ч-з анализ $_SERVER[«REQUEST_URI»] выясню к какой части личной странице идет запрос.

