Запрос комментариев только если они есть

У Вордпресса есть одна интересная особенность: при подключении шаблона comments.php он делает запрос в базу с целью вытащить эти самые комментарии. При этом Вордпрессу не важно есть ли комментарии у поста, а ведь к этому моменту он уже знает число комментариев!

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

Шаблон comments.php обычно подключается функцией comment_template() из шаблона single.php или page.php. Чтобы подключить шаблон с комментариями только при их наличие, нужно в шаблонах single.php и page.php найти строчку, содержащую comment_template() и заменить ее на что-то подобное:

[php]<? if ( get_comments_number() ) comments_template() ?>[/php]

Тем самым мы подключаем шаблон комментариев только если оставлен хотя бы один комментарий.

Часто comments.php содержит еще и вывод формы для добавления комментариев, а значит если не будет комментариев — не будет и формы, так что давайте исправим этот недостаток.

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

Если аргументов много, как было у меня, то есть смысл вынести ее в отдельный файл и подключать этот файл через функцию get_template_part(). Создайте в папке вашей темы файл comments-form.php, добавьте в него вывод формы с вашими аргументами и сохраните. Далее в single.php добавьте:

[php]<? if ( comments_open() ) get_template_part( ‘comments’, ‘form’ ) ?>[/php]

Вот и все! Если комментирование поста не запрещено, будет подключаться файл comments-form.php с нашей формой!