WordPress как на ладони

get_comment_reply_link()WP 2.7.0

Получает ссылку <a>, которая позволяет отвечать на комментарий. Используется в цикле комментариев.

Если подключен JavaScript comment-reply.js, то этот клик по ссылке будет передвигать форму комментирования под комментарий на который пользователь хочет ответить.

Основа для: comment_reply_link()
1 раз — 0.000774 сек (медленно) | 50000 раз — 19.68 сек (медленно)
Хуки из функции

Возвращает

Строку|false|null. Ничего/false/строку. Ссылка для показа формы комментирования, в случае успеха. False, если комментирование закрыто.

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

get_comment_reply_link( $args, $comment, $post );
$args(массив)
Параметры, влияющие на отображение ссылки. См. ниже.
По умолчанию: предустановки
$comment(число/WP_Comment)
ID комментария на который нужно отвечать. По умолчанию текущий комментарий в цикле.
С версии 4.4. можно передавать объект комме комментария WP_Comment.
По умолчанию: null
$post(число/WP_Post)
ID или объект записи к которой относится комментарий. По умолчанию, текущий пост.
По умолчанию: null

Аргументы параметра $args

add_below(строка)
Название префикса для контейнера комментария. По умолчанию comment, означает что форма будет передвигаться под контейнер с атрибутом id="comment-23" (23 ID комментария на который отвечаем).
По умолчанию: 'comment'
respond_id(строка)
Значение атрибута id контейнера формы комментирования. Т.е. если указано respond, то по нажатию на ссылку блок с id="respond" будет передвигаться (это блок формы комментирования).
По умолчанию: 'respond'
reply_text(строка)
Текст ссылки.
По умолчанию: __('Reply')
login_text(строка)
Текст ссылки, который показывается когда для того чтобы оставить комментарий нужно авторизоваться.
По умолчанию: __('Log in to Reply')
depth(число)
Глубина комментариев для которых ссылка будет показана. Для древовидных комментариев. Если указать, например 3, то для комментария с глубиной вложенности 4 ссылка уже не будет отображаться.
По умолчанию: 0
before(строка)
Текст или html, которые нужно добавить перед ссылкой.
after(строка)
Текст или html, которые нужно добавить после ссылкой.
По умолчанию: array()

Примеры

0

#1 Ссылка для ответа на комментарий

Выведем ссылку для ответа на комментарий максимального уровня вложенности - 5, и изменим текст ссылки на "ответить на комментарий":

$link = get_comment_reply_link( [
	'reply_text' => "ответить на комментарий",
	'respond_id' => 'comment',
	'depth'      => 5,
	'max_depth'  => 10,
], 2881, 631 );

// тут можем обработать ссылку перед выводом на экран
//$link = str_replace( 'foo', 'bar', $link );

echo $link;

Выведет такой html код:

<a
 rel='nofollow'
 class='comment-reply-link'
 href='/function/comment_reply_link?replytocom=2881#comment'
 onclick='return addComment.moveForm( "comment-2881", "2881", "comment", "631" )'
 aria-label='Комментарий к записи Владимир'
>
ответить на комментарий
</a>

Список изменений

С версии 2.7.0 Введена.
С версии 4.4.0 Added the ability for $comment to also accept a WP_Comment object.

Код get_comment_reply_link() WP 6.5.2

function get_comment_reply_link( $args = array(), $comment = null, $post = null ) {
	$defaults = array(
		'add_below'     => 'comment',
		'respond_id'    => 'respond',
		'reply_text'    => __( 'Reply' ),
		/* translators: Comment reply button text. %s: Comment author name. */
		'reply_to_text' => __( 'Reply to %s' ),
		'login_text'    => __( 'Log in to Reply' ),
		'max_depth'     => 0,
		'depth'         => 0,
		'before'        => '',
		'after'         => '',
	);

	$args = wp_parse_args( $args, $defaults );

	if ( 0 == $args['depth'] || $args['max_depth'] <= $args['depth'] ) {
		return;
	}

	$comment = get_comment( $comment );

	if ( empty( $comment ) ) {
		return;
	}

	if ( empty( $post ) ) {
		$post = $comment->comment_post_ID;
	}

	$post = get_post( $post );

	if ( ! comments_open( $post->ID ) ) {
		return false;
	}

	if ( get_option( 'page_comments' ) ) {
		$permalink = str_replace( '#comment-' . $comment->comment_ID, '', get_comment_link( $comment ) );
	} else {
		$permalink = get_permalink( $post->ID );
	}

	/**
	 * Filters the comment reply link arguments.
	 *
	 * @since 4.1.0
	 *
	 * @param array      $args    Comment reply link arguments. See get_comment_reply_link()
	 *                            for more information on accepted arguments.
	 * @param WP_Comment $comment The object of the comment being replied to.
	 * @param WP_Post    $post    The WP_Post object.
	 */
	$args = apply_filters( 'comment_reply_link_args', $args, $comment, $post );

	if ( get_option( 'comment_registration' ) && ! is_user_logged_in() ) {
		$link = sprintf(
			'<a rel="nofollow" class="comment-reply-login" href="%s">%s</a>',
			esc_url( wp_login_url( get_permalink() ) ),
			$args['login_text']
		);
	} else {
		$data_attributes = array(
			'commentid'      => $comment->comment_ID,
			'postid'         => $post->ID,
			'belowelement'   => $args['add_below'] . '-' . $comment->comment_ID,
			'respondelement' => $args['respond_id'],
			'replyto'        => sprintf( $args['reply_to_text'], get_comment_author( $comment ) ),
		);

		$data_attribute_string = '';

		foreach ( $data_attributes as $name => $value ) {
			$data_attribute_string .= " data-{$name}=\"" . esc_attr( $value ) . '"';
		}

		$data_attribute_string = trim( $data_attribute_string );

		$link = sprintf(
			"<a rel='nofollow' class='comment-reply-link' href='%s' %s aria-label='%s'>%s</a>",
			esc_url(
				add_query_arg(
					array(
						'replytocom'      => $comment->comment_ID,
						'unapproved'      => false,
						'moderation-hash' => false,
					),
					$permalink
				)
			) . '#' . $args['respond_id'],
			$data_attribute_string,
			esc_attr( sprintf( $args['reply_to_text'], get_comment_author( $comment ) ) ),
			$args['reply_text']
		);
	}

	$comment_reply_link = $args['before'] . $link . $args['after'];

	/**
	 * Filters the comment reply link.
	 *
	 * @since 2.7.0
	 *
	 * @param string     $comment_reply_link The HTML markup for the comment reply link.
	 * @param array      $args               An array of arguments overriding the defaults.
	 * @param WP_Comment $comment            The object of the comment being replied.
	 * @param WP_Post    $post               The WP_Post object.
	 */
	return apply_filters( 'comment_reply_link', $comment_reply_link, $args, $comment, $post );
}
2 комментария
    Войти