• здравствуйте. в файле comments.php есть следующий код

    <h4 id="comments"><?php comments_number('Пока комментариев нет. Напишем?', 'Есть 1 комментарий', 'Есть % комментариев');?> к “<?php the_title(); ?>”</h4>
    
    <?php if ( have_comments() ) : ?>

    как мне в другом топике подсказали, эти 2 строчки содержат 2 идентичные проверки. соответственно от одной проверки можно отказаться, зачем нам 2 раза проверять одно и то же ?

    если удалить строчку

    <?php if ( have_comments() ) : ?>

    то пропадают комментарии ((( но если после этого добавить в первую строчку двоеточие

    <h4 id="comments"><?php comments_number('Пока комментариев нет. Напишем?', 'Есть 1 комментарий', 'Есть % комментариев');?> <?php if ( have_comments() ) : { ?> к “<?php the_title(); ?>” <?php } ?></h4>

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

    подскажите пожалуйста, как надо модифицировать код, чтобы осталась одна проверка и в тегах H4 находился только заголовок с выводом сообщения о количестве комментариев ?

    спасибо.

Просмотр 15 ответов — с 1 по 15 (всего 17)
  • Добрый день!

    По-моему в этом коде все ок.

    <h4 id="comments"><?php comments_number('Пока комментариев нет. Напишем?', 'Есть 1 комментарий', 'Есть % комментариев');?> к “<?php the_title(); ?>”</h4>
    
    <?php if ( have_comments() ) : ?>

    Или там что-то выводится некорректно при таком раскладе?

    Вот тема, с которой все началось тут

    итоговый код, который работает сейчас:

    <h4 id="comments"><?php comments_number('Пока комментариев нет. Напишем?', 'Есть 1 комментарий', 'Есть % комментариев');?> <?php if ( have_comments() ) { ?> к “<?php the_title(); ?>” <?php } ?></h4>
    
    <?php if ( have_comments() ) : ?>

    получается, что у нас 2 проверки: if ( have_comments()

    Я хочу оставить одну проверку. Не вижу смысла 2 раза запрашивать если комментарии или нет.

    Так сделайте вообще вот так:

    <h4 id="comments"><?php comments_number('Пока комментариев нет. Напишем?', 'Есть 1 комментарий', 'Есть % комментариев');?></h4>
    
    <?php if ( have_comments() ) : ?>

    в таком случае не выводится название поста, к которому идут комментарии ((( в этом-то вся и проблема.

    Тогда вот так:)

    <h4 id="comments"><?php comments_number('Пока комментариев нет. Напишем?', 'Есть 1 комментарий', 'Есть % комментариев');?> к “<?php the_title(); ?>”</h4>
    
    <?php if ( have_comments() ) : ?>

    Или так:

    <h4 id="comments"><?php comments_number('Пока комментариев нет. Напишем?', 'Есть 1 комментарий', 'Есть % комментариев');?> к “<?php echo $post->post_title  ?>”</h4>
    
    <?php if ( have_comments() ) : ?>

    Misha, спасибо. работает. но остается один не учтенный нюанс. в моем коде, если нет комментариев, то просто выводится сообщение, что их нет, а если есть — то выводится информация о количестве и к какому посту.

    это как-то можно решить ? тогда вообще мечта получиться 😉

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

    <?php if ( have_comments() ) : ?>
    <h4 id="comments"><?php comments_number('Пока комментариев нет. Напишем?', 'Есть 1 комментарий', 'Есть % комментариев');?> к “<?php echo $post->post_title  ?>”</h4>
    
    ...
    
    <?php else : ?>
    <h4 id="comments">Пока комментариев нет. Напишем?</h4>
    
    ....
    
    <?php endif; ?>

    спасибо за разъяснение, вот только не очень понял, как скрестить последний вариант кода с моим файлом comments.php

    прикрепляю код.

    <!-- You can start editing here. -->
    <div id="commentpost">
    
    <h4 id="comments"><?php comments_number('Пока комментариев нет. Напишем?', 'Есть 1 комментарий', 'Есть % комментариев');?> к “<?php the_title(); ?>”</h4>
    
    <?php if ( have_comments() ) : ?>
    
    <?php if ( ! empty($comments_by_type['comment']) ) : ?>
    
    <div id="post-navigator-single">
    <div class="alignleft"><?php previous_comments_link() ?></div>
    <div class="alignright"><?php next_comments_link() ?></div>
    </div>
    
    	<ol class="commentlist">
        <?php wp_list_comments('type=comment&callback=user_comment'); ?>
    	</ol>
    
    <div id="post-navigator-single">
    <div class="alignleft"><?php previous_comments_link() ?></div>
    <div class="alignright"><?php next_comments_link() ?></div>
    </div>    
    
       <?php endif; ?>
    
     <?php else : // this is displayed if there are no comments so far ?>
    
     <?php if ('open' == $post->comment_status) : ?>
     <!-- If comments are open, but there are no comments. -->
    
    <?php else : // comments are closed ?>
    <!-- If comments are closed. -->
    <h2 id="post-header">Комментарии закрыты.</h2>
    
    <?php endif; ?>
    <?php endif; ?>
    
    <?php if ('open' == $post->comment_status) : ?>
    
    <div id="respond">
    
    <h4><?php comment_form_title( 'Оставить комментарий', 'Написать ответ %s' ); ?></h4>
    
    <div class="cancel-comment-reply">
    <?php cancel_comment_reply_link('Отмена'); ?>
    </div>
    
    <form action="/wp-comments-post.php" method="post" id="cf">
    
    <?php if ( $user_ID ) : ?>
    
    <p>Вы вошли как: <a href="/wp-admin/profile.php"><?php echo $user_identity; ?></a>. <a href="<?php echo wp_logout_url(get_permalink()); ?>" title="Выйти из аккаунта">Выход &raquo;</a></p>
    
    <?php else : ?>
    
    <p>
    <label for="author"><small>Ваше имя <?php if ($req) echo "(обязательно)"; ?></small></label><br />
    <input type="text" class="tf" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" <?php if ($req) echo "aria-required='true'"; ?> />
    </p>
    
    <p>
    <label for="email"><small>Ваша почта <?php if ($req) echo "(обязательно)"; ?></small></label><br />
    <input type="email" class="tf" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" <?php if ($req) echo "aria-required='true'"; ?> />
    </p>
    
    <?php endif; ?>
    
    <textarea name="comment" id="comment" cols="50%" rows="8" class="af" tabindex="3"></textarea>
    
    <div>
    <input name="submit" type="submit" class="st" value="Отправить" id="submit" alt="Отправить свой комментарий" tabindex="4" />
    </div>
    
    <?php comment_id_fields(); ?>
    
    <?php do_action('comment_form', $post->ID); ?>
    
    </form>
    
    </div>
    
    <?php endif; // if you delete this the sky will fall on your head ?>
    </div>

    спасибо

    вот этот else соответствует моему else
    <?php else : // this is displayed if there are no comments so far ?>

    видимо я что-то не так делаю, но если у меня получается код

    <?php if ( have_comments() ) : ?>
    <h4 id="comments"><?php comments_number('Пока комментариев нет. Напишем?', 'Есть 1 комментарий', 'Есть % комментариев');?> к “<?php echo $post->post_title  ?>”</h4>
    
    <?php if ( ! empty($comments_by_type['comment']) ) : ?>
    
    <div id="post-navigator-single">
    <div class="alignleft"><?php previous_comments_link() ?></div>
    <div class="alignright"><?php next_comments_link() ?></div>
    </div>
    
    	<ol class="commentlist">
        <?php wp_list_comments('type=comment&callback=user_comment'); ?>
    	</ol>
    
    <div id="post-navigator-single">
    <div class="alignleft"><?php previous_comments_link() ?></div>
    <div class="alignright"><?php next_comments_link() ?></div>
    </div>    
    
       <?php endif; ?>
    
     <?php else : // this is displayed if there are no comments so far ?>
    <h4 id="comments">Пока комментариев нет. Напишем?</h4>

    то сообщение о том, что нет комментариев выводится 2 раза. один раз к какому посту, а затем (ниже) уже просто «Пока комментариев нет. Напишем?»

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    Попробуйте такой вариант: http://pastebin.com/tyuA2w83.

    Я привёл все условия и разметку в более читаемый вид. Скопируйте файл полностью, чтобы исключить ошибки.

    Функция have_comments() сама по себе очень простая, поэтому заметного прироста производительности от этой оптимизации ожидать не стоит.

    спасибо, перенес, но теперь не выводятся размещенные комментарии.

    Функция have_comments() сама по себе очень простая, поэтому заметного прироста производительности от этой оптимизации ожидать не стоит.

    это я прекрасно понимаю )))

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    но теперь не выводятся размещенные комментарии.

    А у меня они и с вашим вариантом не выводятся 🙂

    Если добавить файл как есть в Twenty Fourteen, то не выполняется это условие:

    <?php if ( ! empty($comments_by_type['comment']) ) : ?>
    ...
    <?php endif; ?>

    Нужно либо убрать эту проверку (строки 8 и 24 в моём варианте), либо найти в шаблонах вызовы comments_template() и добавить второй параметр, который отвечает за разделение комментариев по типу:

    comments_template( '', true );

    Или в вашей теме второй параметр там уже есть, а на комментариях просто прерывается вывод страницы? Какая тема используется? Есть ли ошибки в логах?

Просмотр 15 ответов — с 1 по 15 (всего 17)

Тема «2 идентичные проверки в комментариях» закрыта для новых ответов.