В WordPress 2.7 добавлена поддержка многостраничных комментариев:

Кроме того, в WordPress 2.7 добавлена поддержка многостраничных комментариев; следуя логике статьи, было бы неплохо показывать отрывок (excerpt) вместо полного текста и для страниц комментариев.

Я вижу два способа решения поставленной задачи:

1.Изменение шаблона single.php.
2.Добавление функции в functions.php темы.

Я начну рассмотрение со второго способа — после него реализация первого способа будет тривиальной.

Начнём со скучной теории (skip it).

При использовании разбиения комментариев на страницы, WordPress добавляет переменную cpage в массив $wp_query->query_vars. Но здесь есть парочка нюансов:

1.На первой странице комментариев (она же может быть последней — всё зависит от настроек WordPress) — той, которая отображается при просмотре статьи — WordPress не устанавливает переменную cpage в номер страницы.
2.При отправлении комментария (и использовании многостраничных комментариев) WordPress перенаправляет пользователя на страницу с изменившейся постоянной ссылкой: к постоянной ссылке страницы добавляется comment-page-PAGE/#comment-ID. PAGE — это номер страницы комментариев, ID — ID комментария.
3.Если в постоянной ссылке присутствует параметр comment-page-XXX (он же cpage при отключённом ЧПУ), то WordPress устанавливает переменную $wp_query->query_vars['cpage'] (сюрприз!)
Какие из этого можно сделать выводы? Если посетитель просматривает не первую страницу комментариев, либо только что оставил свой комментарий, $wp_query->get(‘cpage’) вернёт ненулевое значение. В противном случае переменная $wp_query->query_vars['cpage'] не будет установлена. Что и требовалось по условию.

Теперь переходим к отрывку (который excerpt). Плохая новость заключается в том, что многие люди (в том числе и я) его просто не заполняют. Хорошая новость — WordPress (по крайней мере, 2.8; хотя в комментариях к коду написано, что работает, начиная с версии 1.5) умеет его заполнять самостоятельно — это делает функция wp_trim_excerpt(), которая устанавливается фильтром на событие get_the_excerpt. У этой функции (по сравнению с методом Сергея) есть два недостатка:

1.Она убирает напрочь всю HTML-разметку (anybody cares?)
2.У WordPress своё представление о том, как выглядит знак типографского пропуска (лечится установкой своего фильтра на событие wp_trim_excerpt).
Есть одна особенность: вызов функций the_excerpt()/get_the_excerpt() из фильтра the_content может привести к рекурсивному вызову этого же фильтра из функции wp_trim_excerpt().

В functions.php темы добавляем такой код (в WordPress младше 2.8 вместо esc_atrr() нужно использовать attribute_escape()):

View Code PHP EasyClearing function show_excerpt_on_paged_comments($s)
{
static $in_here = 0;

if ($in_here) {
return $s;
}

$in_here = 1;

global $wp_query;
$cpage = (int)$wp_query->get(‘cpage’);
if ($cpage > 0) {
$s = get_the_excerpt() . ‘<p>← Вернуться к полной версии записи «<strong>’ . sprintf(‘<a href=»%s»>%s</a>’, esc_attr(get_permalink()), get_the_title()) . ‘</strong>»…</p>’;
}

$in_here = 0;
return $s;
}

if (function_exists(‘add_filter’)) {
add_filter(‘the_content’, ‘show_excerpt_on_paged_comments’);
} Для тех, кто ждёт первый вариант: в шаблоне single.php заменяем вызов the_content() следующим кодом:

[-] View Code PHP EasyClearing<?php
if ((int)$wp_query->get(‘cpage’) > 0) {
echo get_the_excerpt() . ‘<p>← Вернуться к полной версии записи «<strong>’ . sprintf(‘<a href=»%s»>%s</a>’, esc_attr(get_permalink()), get_the_title()) . ‘</strong>»…</p>’;
}
else {
the_content(«Далее…»);
}
?> В принципе, вариант №2 (тот, который был рассмотрен первым) при желании можно реализовать в виде плагина.

Материал был взят с сайта: www.Blog.sjinks.pro

Система авторегистрации в каталогах, статьи про раскрутку сайтов, web дизайн, flash, photoshop, хостинг, рассылки; форум, баннерная сеть, каталог сайтов, услуги продвижения и рекламы сайтов

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Security Code: