Блог :: ЮБ

28 января 2009

Страница комментариев

Иногда из эстетических или сайтораскруточных соображений возникает необходимость вынести комментарии на отдельную страницу (бишь, выделить отдельный урл). Ниже я покажу один из множества возможных способов.

Одной из интересных особенностей WordPress является то, что при использовании популярной схемы ЧПУ /%category%/%postname%.htm слаг рубрики в урле служит скорее украшением, чем функциональным элементом. Воспользуемся этим. Придумаем рубрику comments (создавать ее при этом  совершенно не обязательно, пусть будет виртуальная). Зачем? Для того чтобы иметь возможность записать урл поста в виде /comments/слаг_поста.htm.  Можете проверить, WP на такой урл прореагирует точно также, как и на урл с реально существующей рубрикой. Если не получилось, можете дальше не читать.

Итак, что мы имеем? Работающие линки /comments/слаг_поста.htm и /слаг_рубрики/слаг_поста.htm. Теперь нам нужно сделать так, чтобы в штатном выводе не показывались комментарии, зато показывались в нештатном. Копируем файл шаблона single.php в single-comments.php. В single.php находим строку
<?php comments_template(); ?>
и удаляем её. На этом месте нам нужно бы вывести ссылочку на /comments/слаг_поста.htm, но об этом позже, ссылки - отдельная тема.

Теперь вернемся к шаблону single-comments.php. Как вы уже догадались, мы будем использовать его для вывода комментариев. Для этого в functions.php нашей Темы добавляем следующий код:

add_filter('single_template', 'yube_comments_temlate');
function yube_comments_temlate($template) {
	global $wp_query;
	if ( $wp_query->query_vars['category_name'] == 'comments' and
		file_exists(TEMPLATEPATH . '/single-comments.php') )
			$template = TEMPLATEPATH . '/single-comments.php';
	return $template;
}

Теперь, увидев пост в “рубрике” comments, WordPress выведет его, использовав шаблон single-comments.php. Если вывод текста поста на этой странице вы считаете неуместным, то можете убрать из Цикла (Loop) the_content() или, если используете теги <!–more–>, после the_post(); можете добавить $more = 0; Да и the_excerpt() никто не отменял.

Есть и “ленивый” метод: ничего не добавлять в functions.php, ничего не копировать, только вышеупомянутую строку в single.php (или в index.php) модифицировать так:

<?php if ( $wp_query->query_vars['category_name'] == 'comments')
    comments_template(); ?>

Как получить в нужных местах ссылку на эту страницу, я расскажу в следующий раз.

P.S. На этом блоге сделано не так :)

Автор: Белотицкий
Разделы: WordPress

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru
См. также:
Теги шаблонов WordPress
Йодированная соль для печенья.
Plugin auto-more (V1)

Disclaimer. Я никого не принуждаю к миру использованию плагинов.
Плагины имеют полное право не работать на ваших сайтах.
Использование моих плагинов - не повод перекладывать свои заботы на меня.