Страница комментариев
Иногда из эстетических или сайтораскруточных соображений возникает необходимость вынести комментарии на отдельную страницу (бишь, выделить отдельный урл). Ниже я покажу один из множества возможных способов.
Одной из интересных особенностей 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. На этом блоге сделано не так 🙂
А мне больше нравится когда комменты скрываются и открываются по кнопке.
спасибо
Боюсь, коллеги, что продолжения не будет. Во-первых, разработка подмены ссылок потерялась, а я помню только, что «честного» хука там не было, что использовался debug_backtrace() для определения вызвавшей функции. А во-вторых, в новых версиях WP механизм комментариев сильно изменился, так что, похоже, это всё надо делать по-другому. C’est la vie 🙁
Где же продолжение? И как «не так» сделано у Вас?
Спасибо за статью, было бы здорово если бы вы рассказали как все-таки ссылаться на страницу комментариев, ну очень нужно)