Форматирование зоны комментариев в WordPress. Форматирование зоны комментариев в WordPress Синтаксис php комментариев: однострочный комментарий

  • 25.03.2024

Предыстория написания этой статьи — типична: решила я выделить свои комментарии отдельным стилем… Благо, уже не первый день кромсаю style.php и основные правила синтаксиса CSS мне известны. И, конечно, эта невинная затея обернулась небольшим конфузом, поисками решения… В финале все удалось. А теперь я хочу рассказать вам, какие магические пассы я применила для украшения собственных комментов.

Смысл всех манипуляций, которые описаны далее — выделить ваши комментарии и ответы читателям. Если не переборщить со стилями, то получится вполне элегантно. Конечно, это не жизненная необходимость. Тот, кто решил просмотреть ваши комментарии — смогут это сделать по нику. Но идея красоты — тоже важна для многих блоггеров.

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

Особенно важно применение отдельного стиля для комментов автора на блогах, где разрешены древовидные комментарии с достаточно глубокой степенью вложенности. Говоря проще, где пользователь может отвечать на комментарии, отвечать на ответы и так далее.

Посмотрим стили комментов, которые уже используются

Не удивляйтесь, что я предлагаю, как бы, начать с конца. Но для пользователей, которые не вполне свободно себя чувствуют в редактировании тем Вордпресс — это наиболее наглядный и явный путь.

Итак, выберите на своем блоге пост, к которому оставлены комментарии. Конечно, нужно, чтобы были здесь и ваши ответы. Открыв такую страницу, кликните по ней правой кнопкой мыши и выберите «Просмотр кода страницы» (в браузерах Гугл Хром и Файерфокс — точно есть такая возможность).

Не пугайтесь, увидев простыню кода. На самом деле, ничего сложного и тайного тут нет. Прокручивайте страницу вниз и заметите, что сначала выводятся общие сведения о посте, потом его текст с форматированием. Ниже, наконец, будет код, относящийся к комментариям. Можете просто набрать Ctrl+F , в появившемся окошке ввести commentlist и нажать Enter — вас сразу «перебросит» на нужную строку, где искомое слово будет ярко подсвечено.

Теперь смотрим, как размечены стили наших комментариев. Для наглядности код из моей темы. Конечно, у вас он может выглядеть и быть структурирован чуть иначе, но основной смысл отдельных частей кода должен быть понятен:

  • НИК КОММЕНТАТОРА:

    ТЕКСТ КОММЕНТА

    • ВАШ НИК:

      ТЕКСТ ВАШЕГО ОТВЕТА

      ЗДЕСЬ ДАННЫЕ ДЛЯ КНОПКИ "Ответить"
    • Собственно, нам нужно найти только комменты с вашим ником (например, на этом блоге я пишу и отвечаю под ником Katyaru). И чуть выше нужная строка, которая начинается так:

    • Вот эти обозначения класса — comment byuser comment-author-admin bypostauthor odd alt depth-2 — нас интересуют. Что они значат? — comment «стиль коммента» byuser «стиль зарегистрированного юзера» comment-author-admin «стиль автора-админа» bypostauthor «стиль автора поста» odd «стиль четного комментария» (или even — «нечетный») alt «стиль ответного комментария» depth-2 «глубина вложенности комментария — 2″

      Внимание: если вы разумно поменяли свой логин для входа на блог с «admin» — на какой-нибудь другой, то название стиля будет выглядеть так comment-author-ВАШ ЛОГИН. Именно логин для входа в админку, а не тот ник , которым вы подписываетесь!!!

      Тут возможны варианты. Возможно, комментаторы на вашем блоге должны быть зарегистрированными пользователями. Возможно, автором поста являетесь не вы, а другой зарегистрированный пользователь — без прав админа. Но админ-то на блоге только один — и это вы! Поэтому следует обратить внимание именно на comment-author-admin (или comment-author-ВАШ ЛОГИН) — он должен быть уникален для всех ваших комментариев.

      В общем, алгоритм действий таков:

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

      Добавление специального стиля для комментов админа блога

      Открываем страницу с таблицами стилей в админке блога style.php — лучше предварительно сделать backup темы или, по крайней мере, скопировать весь код с этой страницы и сохранить его отдельным файлом в блокноте. Тогда вы сможете восстановить стили без ошибок, которые мы готовимся сделать

      Находим описание стиля комментариев, используя для поиска слово commentlist. Напоминаю, что, в разных темах код выглядит отлично, но смысл везде — одинаков. Например, у меня, кроме всего прочего, есть такие строки:

      ТУТ МОЖЕТ БЫТЬ МНОГО РАЗНОГО ol.commentlist li.alt{} ol.commentlist li.bypostauthor p{} ol.commentlist li.byuser {} ol.commentlist li.comment-author-admin{ВПИСЫВАЕМ СВОЙ СТИЛЬ} ol.commentlist li.comment{} ol.commentlist li div.comment-author-admin{ВПИСЫВАЕМ СВОЙ СТИЛЬ} ТУТ МОЖЕТ БЫТЬ МНОГО РАЗНОГО ol.commentlist li ul.children li.bypostauthor{} ol.commentlist li ul.children li.byuser{} ol.commentlist li ul.children li.comment{} ol.commentlist li ul.children li.comment-author-admin{ВПИСЫВАЕМ СВОЙ СТИЛЬ} ol.commentlist li ul.children li.depth-2{} ol.commentlist li ul.children li.depth-2 li.comment-author-admin{ВПИСЫВАЕМ СВОЙ СТИЛЬ} ol.commentlist li ul.children li.depth-3{} ol.commentlist li ul.children li.depth-3 li.comment-author-admin{ВПИСЫВАЕМ СВОЙ СТИЛЬ} И ТАК ДАЛЕЕ

      Такие пустые фигурные скобочки {} показывают, что специальный стиль не задан. Именно эту пустоту мы и должны заполнить своим кодом.

      Внимание: сначала нужно поменять в коде слово «admin» на ваш логин!!! Во всех строках, где используется название этого стиля!!!

      Возможные стили для комментов админа

      Мы уже договорились, что сильно наворачивать админские комменты не станем. Нужно лишь слегка их подчеркнуть. Например, я сделала толстую зеленую полосочку слева от моих ответов.

      Лезть в код или не лезть? Раньше мы уже говорили, что форма комментариев немного сложна, и поэтому создатели все максимально упростили.

      Функция вызова комментариев простая и не имеет параметров

      Выглядит просто, но делает очень много. Фактически она создает огромное количество html кода и использует кучу php кода. Т.к. эта функция генерирует весь готовый html код, то нам придется иметь с ним дело без возможности как-то отрегулировать или настроить использованием параметров. Это может быть определенной проблемой, с учетом того, что мы не очень можем этот html код изменить. Не нравятся классы div? Не хотите использовать граватары? Желаете изменить порядок вывода строк?

      Со всем этим придется смириться и скрывать ненужные вещи с помощью css. С этой точки зрения вам нужно будет определиться - по какому пути предпочтений вы пойдете:

      wp_list_comments

      • легко использовать
      • встроенный функционал комментирования
      • встроенный функционал разбития на страницы
      • встроенный функционал древовидного отображения
      • css классы по умолчанию для базовых задач

      пользовательская функция комментариев

      • абсолютный полный контроль над всем
      • стандартные и пользовательские css классы
      • наличие плагинов для добавления нужного функционала

      Выбор метода формирования комментариев зависит от множества факторов. В общем, мы рекомендуем использовать wp_list_comments и не морочить голову. Если же вам нужно сделать что-то свое, особенное и специфическое, с желаемым функционалом и возможностями, и это желание подкрепляется знаниями, то использование пользовательских циклов даст возможность это все воплотить.

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

      wp_list_comments() или пользовательский цикл?

      До версии 2.7 цикл вывода комментариев был на базе запросов к базе данных и отображался несколько извилистым, но хорошо понятным путем.

      Затем комментарии были обогащены дополнительным функционалом — постраничной навигацией и древовидной вложенностью. Эти возможности активировались через админку, и цикл foreach был заменен на уже показанную функцию wp_list_comments. Однако этот цикл по прежнему остается работоспособен, правда по понятной причине не поддерживая дополнительный функционал.

      Хотя wp_list_comments и не выглядит как цикл, но она делает все тоже самое, повторяет раз за разом запросы и вывод комментариев, пока они не закончатся, размечая их соответствующими тегами.

      Обычно готовый хтмл код одного комментария выглядит примерно так:

      1. Имя комментатора says:

        Спасибо, у вас супер сайт!

      Как видно, цикл вывода комментария содержит картинку-граватар, несколько дивов, много разных css классов, ссылку на автора и собственно текст комментария. Если это вас устраивает — то это хорошо, больше ничего делать и не нужно.

      В этом случае вы можете протянуть свои руки только к следующим доступным параметрам wp_list_comments:

      • размер аватары по умолчанию 32 пикселя
      • стили css — используя их названия можно изменить параметры на нужные
      • стиль вывода списка комментариев style. По умолчанию комментарии выводятся тегами неупорядоченного списка
          , но если вы вместо этого хотите использовать упорядоченный список
            , то используйте такой параметр "ol")); ?>
          1. тип type — строковый параметр, отвечающий за отображаемые комментарии. Доступные параметры — all, comment, trackback, pingback, pings. Pings означает, что будут выводиться вместе и трекбеки, и пингбеки. По умолчанию параметр равен all, т.е. все комментарии отображаются.
          2. текст ответа reply_text — определяющий, что будет написано на ссылке ответа на комментарий, обычно «Ответить»
          3. текст авторизации login_text — отображается в случае, если для ответа необходимо авторизироваться на сайте, обычно «Авторизируйтесь для комментирования»
          4. callback — имя пользовательской функции для отображения комментариев.
          5. Дополнительные параметры, доступны

        Это немного, но в большинстве случаев достаточно для минимально необходимых модификаций. Если нужно больше, то придется использовать пользовательский цикл либо вмешиваться в php код, написанный в comments.php, либо добавлять нужный функционал в functions.php.

        Шаманим в functions.php

        Для начала укажем в comments.php, что мы будем использовать свою пользовательскую функцию

        Теперь создадим в functions.php свою пользовательскую функцию

      • id="li-comment-">
        ");?> %s says:"), get_comment_author_link()); ?>
        comment_approved == "0") : ?>
        $depth,"max_depth" => $args["max_depth"]))); ?>
        Обратите внимание, что мы не закрываем тег
      • , т.к. вордпресс автоматически создаст закрывающие теги в зависимости от разметки вложенных комментариев.

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

        А теперь давайте тряхнем стариной - вместе с wp_list_comments поставим цикл foreach

        Такое использование позволит шаблону быть обратно совместимым со старыми версиями вордпресса.

        Теперь, зная как настроить цикл комментариев, давайте модифицируем его под свои нужды и применим несколько прикольных трюков.

        Реализуем постраничные комментарии

        Заранее никто не знает, что контент на сайте может привлечь сотни комментариев. К чему я клоню — мы все суперзвезды и успех может придти неожиданно. Запись с сотней комментариев может быть безумно длинной для просмотра и перемотки. В общем, мы конечно не боимся вертикальной прокрутки (в отличие от горизонтальной), но границы должны быть у всего. Типичный пост с 60 комментариями может быть до 20 тыс. пикселей в высоту!

        Великолепный способ навести порядок - это разбивать ленту комментариев на страницы и отображать их постранично.

        Включив постраничную навигацию, не забудьте добавить в файл comments.php функции для вывода ссылок «Раньше» «Позже»

        Эти ссылки будут автоматически появляться и разбивать простынку комментариев, при превышении заданного количества комментариев на одну страницу. Если комментариев меньше этого числа — ссылки не будут отображаться.

        И здесь есть один подвох. Возникает известная сео проблема дублирования контента с постраничными комментариями. Это происходит из-за того, что создаются одинаковые урлы для каждой страницы комментариев

        • https://yoursite.com/ghost-dad-rocked/
        • https://yoursite.com/ghost-dad-rocked/comments-page-1/
        • https://yoursite.com/ghost-dad-rocked/comments-page-2/
        • https://yoursite.com/ghost-dad-rocked/comments-page-3/

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

        Чтобы избежать дублирования, есть несколько решений:

        1. Не использовать постраничные комментарии
        2. Использовать мета-теги для создания канонических урл для каждой записи
        3. Использовать плагин

        Если ваш сайт супер-популярный или собирается таким стать, то конечно лучше использовать канонические урлы. Если же бурные обсуждения не планируются, то проще использовать традиционные простынки комментариев без разбития на страницы.

        SEO for Paged Comments применяет еще более радикальный способ — убирая содержимое записи с страниц комментариев и заменяя на цитату или урезанную версию записи.

        Реализуем вложенные комментарии

        Вложенные древовидные комментарии позволяют посетителям писать ответ выбранному существующему комментарию, создавая развернутое обсуждение диалог. После активации этой возможности в настройках, возле каждого комментария появится ссылка «Ответить», позволяющая высказаться по конкретному комментарию.

        До появления такой возможности существовал стиль ответа выбранному автору, используя в тексте комментария его имя и знак @, типа «@Вася ты не прав!» С некоторой трансформацией этот способ прижился во многих приложениях в интернете и живет до сих пор, например, в твиттере. А в современных версиях вордпресса такое упоминание не нужно использовать.

        Теперь достаточно просто нажать на соответствующую ссылку «Ответить» и высказаться. После одобрения текста комментария он появится сразу же под комментарием, на который был написан.

        Если ваш шаблон не поддерживает такой вид комментирования, есть легкий способ добавить такую возможность:

        1. Делаем резервные копии файлов, что по идее должно уже войти в привычку
        2. Включаем вложенные комментарии в настройках Параметры→Настройки обсуждения→Разрешить древовидные комментарии
        3. Добавляем следующий код в header.php сразу же перед wp_head()
        4. Добавляем в comments.php непосредственно перед закрывающим тегом
        5. Проверяем, что