Сен 19

WordPress: Создаем персональные страницы

Рубрики: Wordpress Метки: , ,  Количество просмотров: 2,508

Перед тем как приступить к разработке личных дневников для сайта rybalka.tv нужно было определится в каком формате были бы ссылки. В голове крутились 2 варианта.

Либо:

http://lnx.rybalka.tv

Либо:

http://rybalka.tv/users/lnx/

Сам я больше склонялся к второму варианту, но все же, немного сомневаясь задал вопрос на searchengines.ru. Ответов не много, но меня они убедили остановится на втором варианте.

Дальше дело было за технической стороной. И по началу возникли трудности.
В прошлом посте я писал о том как сделать в wordpress страницу с индивидуальным шаблоном, но увы… этот способ не подходит для моей задумки.

Для начала я хочу предложить пользователям сайта:

  1. Вести личный дневник. Ссылка вида: http://rybalka.tv/users/lnx/blog/
  2. Создавать отчеты о рыбалке. Ссылка вида: http://rybalka.tv/users/lnx/foto/
  3. Писать собственные статьи. Ссылка вида: 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»] выясню к какой части личной странице идет запрос.

Другие статьи автора

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