WordPress как на ладони
Дешевый WordPress пакет для разработки Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

comments_popup_link() WP 0.71

Выводит готовую <a> ссылку на всплывающее окно комментариев, работает при использовании скрипта comments_popup_script().

Если нужный скрипт не вызывается, то будет выведена простая ссылка на комментарии записи, см comments_link().

Как будет выглядеть всплывающее окно определяется файлом шаблона: comments-popup.php.

Этот Тег шаблона должен быть внутри Цикла WordPress или цикла комментариев.

Функция ничего не выводит, если отображаются отдельные страницы записей: is_single() или is_page().

✈ 1 раз = 0.008033с = очень медленно | 50000 раз = 13.64с = медленно PHP 7.1.5, WP 4.8.2
Хуки из функции:
Возвращает

html код ссылки.

Использование

comments_popup_link( $zero, $one, $more, $css_class, $none);
$zero(строка)
Текст для показа, когда нет комментариев.
По умолчанию: 'Нет комментариев'
$one(строка)
Текст для показа, если 1 комментарий.
По умолчанию: '1 комментарий'
$more(строка)
Текст для показа, если более одного комментария.
По умолчанию: '%1$s комментариев'
$css_class(строка)
Название css класса для ссылки. По умолчанию класс не задается.
По умолчанию: ''
$none(строка)
Текст для показа, если у записи комментирование отключено.
По умолчанию: 'Комментирование отключено'

Примеры

#1. Вывод ссылки на всплывающее окно комментирования на страницах архивов.

Нужно чтобы можно было комментировать статью не переходя к самой статье:

<?php comments_popup_script(); ?>
<p><?php comments_popup_link(); ?></p>

получим:

<script type='text/javascript'>
function wpopen (macagna) {
	window.open(macagna, '_blank', 'width=400,height=400,scrollbars=yes,status=yes');
}
</script>
<a href="/?comments_popup=19" onclick="wpopen(this.href); return false" title="Комментарий к записи Название статью">Комментариев нет</a>

#2. Как не показывать ссылку на всплывающее окно комментирования, когда комментарии закрыты:

<?php
if( comments_open() ){
	comments_popup_link( 'Комментариев пока нет', '1 комментарий', '% комментариев', 'с_link' );
}
?>

Код comments_popup_link: wp-includes/comment-template.php VER 4.9.8

<?php
function comments_popup_link( $zero = false, $one = false, $more = false, $css_class = '', $none = false ) {
	$id = get_the_ID();
	$title = get_the_title();
	$number = get_comments_number( $id );

	if ( false === $zero ) {
		/* translators: %s: post title */
		$zero = sprintf( __( 'No Comments<span class="screen-reader-text"> on %s</span>' ), $title );
	}

	if ( false === $one ) {
		/* translators: %s: post title */
		$one = sprintf( __( '1 Comment<span class="screen-reader-text"> on %s</span>' ), $title );
	}

	if ( false === $more ) {
		/* translators: 1: Number of comments 2: post title */
		$more = _n( '%1$s Comment<span class="screen-reader-text"> on %2$s</span>', '%1$s Comments<span class="screen-reader-text"> on %2$s</span>', $number );
		$more = sprintf( $more, number_format_i18n( $number ), $title );
	}

	if ( false === $none ) {
		/* translators: %s: post title */
		$none = sprintf( __( 'Comments Off<span class="screen-reader-text"> on %s</span>' ), $title );
	}

	if ( 0 == $number && !comments_open() && !pings_open() ) {
		echo '<span' . ((!empty($css_class)) ? ' class="' . esc_attr( $css_class ) . '"' : '') . '>' . $none . '</span>';
		return;
	}

	if ( post_password_required() ) {
		_e( 'Enter your password to view comments.' );
		return;
	}

	echo '<a href="';
	if ( 0 == $number ) {
		$respond_link = get_permalink() . '#respond';
		/**
		 * Filters the respond link when a post has no comments.
		 *
		 * @since 4.4.0
		 *
		 * @param string $respond_link The default response link.
		 * @param integer $id The post ID.
		 */
		echo apply_filters( 'respond_link', $respond_link, $id );
	} else {
		comments_link();
	}
	echo '"';

	if ( !empty( $css_class ) ) {
		echo ' class="'.$css_class.'" ';
	}

	$attributes = '';
	/**
	 * Filters the comments link attributes for display.
	 *
	 * @since 2.5.0
	 *
	 * @param string $attributes The comments link attributes. Default empty.
	 */
	echo apply_filters( 'comments_popup_link_attributes', $attributes );

	echo '>';
	comments_number( $zero, $one, $more );
	echo '</a>';
}

Cвязанные функции

Из раздела: Комментарии

Еще из тегов шаблона: Комментарии

24 коммента
Полезные 2 Все
  • Allpa cайт: allpa.ru

    Слушай, несколько часов уже маюсь, не могу привести к нужному виду sad

    К примеру, тут можно глянуть на страницу "фром блог": allpa.ru/category/from-blog/
    Видишь под анонсами чёрную кнопочку "Подробнее"? Вооот..
    Задача: поставить рядом с ней вторую кнопку, белую, но ведущую на комментарии.
    В шаблоне код для этого дела прописан такой ?

    <a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"><?php _e('Подробнее', 'warp'); ?></a>
    		<?php comments_popup_link(__('комментариев нет', 'warp'), __('1 коммент.', 'warp'), __('% коммент.', 'warp'), "", ""); ?>

    Первую строчку, для чёрной кнопки, я оформила ?

    <a class="small-dark-button" href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"><span class="pngfix"><?php _e('Подробнее', 'warp'); ?></span></a>

    Где small-dark-button и span class="pngfix" — стили для оформления кнопки (выдрала из стороннего шаблона).

    А на второй строчке, как я уже говорила, произошёл затык: чего я только с ней не делала в течение нескольких часов! Не работает ни в какую! dash3

    Сейчас я закинула туда код для просто кнопки и написала на ней надпись smile

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

    Я пыталась просто, ради эксперимента, заменить ?

    __('комментариев нет', 'warp'), __('1 коммент.', 'warp'), __('% коммент.', 'warp'), "", ""

    на вариант из твоего примера ?

    'Комментариев пока нет', '1 комментарий', '% комментариев',

    Тогда страница не грузиццо ваще. То есть бекраунд, хидер, футер есть, а контента — нет.

    Что за тупой шаблон, ёлки-палки..
    Буду менять, ну его в жопу!

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

    Спасибо! blush

    Ответить6.10 лет назад #
    • Kama6896

      Я смотрю, кнопки сделаны и ведут куда надо, вроде. Все уже помощь не требуется?

      Ответить6.10 лет назад #
      • Allpa cайт: allpa.ru

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

        Ответить6.10 лет назад #
  • Allpa cайт: allpa.ru

    Вернула: allpa.ru/category/from-blog/ - кнопки под анонсами постов.
    Которая "Подробнее" — с этой я справилась, как я рассказывала.
    Вторая, белая, по задумке должна отправлять в каменты и на ней должна быть надпись "столько-то каментов" — чем и занимается функция comments_popup_link (я оставила рядом стандартную ссылку, видишь?).

    Так проблема в том, что я не могу заставить эту ссылку лечь на кнопку sad

    Ответить6.10 лет назад #
    • Kama6896

      comments_popup_link() — это не то.

      Тебе нужна функция comments_number(), используй её так:

      <a href="<?php the_permalink() ?>#comments" class="small-light-button">
      <span class="pngfix"><?php comments_number('нет комментариев', '1 комменатрий', '% комментариев'); ?></span>
      </a>
      Ответить6.10 лет назад #
      • Allpa cайт: allpa.ru

        Ура! clapping
        А где тултип "Комментировать запись "ляляляля"?
        Я так понимаю, почитав твою инструкцию к comments_number(), эта функция тултипы не поддерживает, да?

        comments_popup_link() — это не то

        Оно стояло в шаблоне по умолчанию, и всплывал тултип, такая петрушка..

        Спасибо, дружище smile

        Ответить6.10 лет назад #
        • Kama6896

          Мммм, под тултип имеется ввиду title в теге ссылки? Его добавить проще простого!

          title="Комментировать запись: <?php the_title_attribute(); ?>"

          получится в итоге так:

          <a href="<?php the_permalink() ?>#comments" class="small-light-button" title="Комментировать запись: <?php the_title_attribute(); ?>">
          <span class="pngfix"><?php comments_number('нет комментариев', '1 комменатрий', '% комментариев'); ?></span>
          </a>
          Ответить6.10 лет назад #
          • Allpa cайт: allpa.ru

            Спасибо, всё получилось!
            Добавила апдейт к посту. Ща полезу по твоему мануалу с кнопкой разбираться. И тоже допишу результат — Интернет должен знать своих профессионалов!

            Ответить6.10 лет назад #
          • Allpa cайт: allpa.ru

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

            Ответить6.10 лет назад #
  • @ Sv9t

    Тимур, подскажи, у меня тоже эта функция

    <?php comments_popup_link (); ?>

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

    Ответить6.4 лет назад #
    • @ Алексей

      подскажите как сделать чтобы надписи не отображались а только количество комментариев (числом) а если комментариев нет то число ноль. Спасибо!

      Ответить2.8 года назад #
      • Kama6896

        Количество комментриев можно получить из поля comment_count таблицы wp_posts.
        Т.е. на странице записи количество комментариев можно получить так:

        global $post;
        echo $post->comment_count;
        Ответить2.8 года назад #
  • Андрей

    Подскажите пожалуйста, как правильно сделать склонение, в случае 3-комментария?

    Ответить2.7 года назад #
    • Kama6896

      Чет посмотрел я похоже никак, только передать этой функции правильный текст, который нужно заранее обработать, используйте http://wp-kama.ru/question/funktsiya-skloneniya-slov-posle-chisel-php и get_comments_number():

      <?php
      $__decline = function( $number, $titles, $param2 = '', $param3 = '' ){
      	if( is_string($titles) )
      		$titles = preg_split('~,\s*~', $titles );
      
      	if( count($titles) < 3 )
      		$titles = array( func_get_arg(1), func_get_arg(2), func_get_arg(3) );
      
      	$cases = array (2, 0, 1, 1, 1, 2);
      
      	return $number .' '. $titles[ ($number%100 > 4 && $number %100 < 20) ? 2 : $cases[min($number%10, 5)] ];
      };
      
      if ( comments_open() ){
      	$more_text = $__decline( get_comments_number(), 'комментарий,комментария,комментариев' );
      	?>
      	<p>
      		<?php comments_popup_link( 'Комментариев пока нет', $more_text, $more_text, 'с_link'); ?>
      	</p>
      	<?php
      }
      ?>
      Ответить2.7 года назад #
  • @ Владислав

    Здравствуйте! Подскажите, пожалуйста, как мне избавится от screen-reader-text?
    В index.php прописал comments_popup_link() и теперь вместо надписи "Комментариев нет" появилась надпись "Коменнтариев к (название записи) нет". Так вот мне нужно чтобы не указывалось (название записи), потому что из-за этого текстового дополнения получается длинная строка и иногда текст съезжает (если название записи длинное). Через фаирбаг посмотрел, а там вот этот screen-reader-text. Я так понял, что этот текст специально встраивается для удобства и чтобы его править, его нужно искать где-то в шаблонах? scratch_one-s_head

    • @ Владислав

      Я нашёл пояснение на сайте WP: https://make.wordpress.org/accessibility/handbook/best-practices/markup/the-css-class-screen-reader-text/, но не уверен, что смогу правильно применить, что там написано. Может кто-нибудь мне подсказать это?

      • @ Rem

        Вопрос до сих пор не решён. Если найдётся добрый человек, буду признателен.

        • @ Rem

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

          • newbie32 cайт: yumchief.com

            Тебе нужно переопределить функцию comments_popup_link, а именно убрать из неё строки:

            <span class="screen-reader-text"> on %s</span>

            %s - это название твоей записи
            Функция находится здесь: wp-includes/comment-template.php, но тут ничего менять не нужно, иначе при следующем обновлении WP у тебя все слетит.

            Погугли, как правильно переопределять функции.

            1
    • @ campusboy3053 cайт: www.youtube.com/c/wpplus

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

      2
      • @ Rem

        Здравствуйте! Спасибо за ответ! Вот код из index.php:

        <div class="articles">
        		<div class="articles-gen-img">
        			<a href="<?php the_permalink();?>">
        			<?php if(has_post_thumbnail()):?>
        				<?php the_post_thumbnail(); ?>
        			<?php else:?>
        				<img src="<?php bloginfo('template_url'); ?>/images/noimages.png" alt="img"/>
        			<?php endif; ?>
        			</a>
        		</div>
        		<div class="articles-head">
        			<span class="articles-date"><img src="<?php bloginfo('template_url'); ?>/images/article-autor.jpg" alt="" /><span><?php the_author(); ?></span> <?php the_time('j F в H:i, Y '); ?></span>
        			<span class="articles-comments"><img src="<?php bloginfo('template_url'); ?>/images/article-comment.jpg" alt="" /><a href="#"><?php comments_popup_link(); ?></a></span>
        </div>

        А вот так на сайте выглядит. Мне необходимо избавиться от текста, который я выделил красным прямоугольником:

        • @ campusboy3053 cайт: www.youtube.com/c/wpplus
          <?php comments_number('Нет комментариев', '1 комментарий', 'Комментариев уже %'); ?>
          2
          • @ Rem

            Большое вам спасибо! Сделал вот так:

            <span class="articles-comments"><img src="<?php bloginfo('template_url'); ?>/images/article-comment.jpg" alt="" /><a href="#"><?php comments_popup_link('Нет комментариев', '1 комментарий', 'Комментариев уже %'); ?></a></span>


            И всё заработало! good2 Дай вам Бог здоровья! Подписался на ваш канал.

Здравствуйте, !     Войти . Зарегистрироваться