get_comment_link() WordPress Function

The get_comment_link() function is used to retrieve the URL for a specific comment. This function is useful for creating links to individual comments, which can be useful for linking to a specific comment from another location on your site. This function can also be used to create permalinks to individual comments.

get_comment_link( WP_Comment|int|null $comment = null, array $args = array() ) #

Retrieves the link to a given comment.


Description

Top ↑

See also


Top ↑

Parameters

$comment

(WP_Comment|int|null)(Optional)Comment to retrieve. Default current comment.

Default value: null

$args

(array)(Optional)An array of optional arguments to override the defaults.

  • 'type'
    (string) Passed to get_page_of_comment().
  • 'page'
    (int) Current page of comments, for calculating comment pagination.
  • 'per_page'
    (int) Per-page value for comment pagination.
  • 'max_depth'
    (int) Passed to get_page_of_comment().
  • 'cpage'
    (int|string) Value to use for the comment's "comment-page" or "cpage" value. If provided, this value overrides any value calculated from $page and $per_page.

Default value: array()


Top ↑

Return

(string) The permalink to the given comment.


Top ↑

More Information

Top ↑

Default Arguments

The following default arguments are used unless found in the optional $args argument:

page
The zero-based index for the page where the comment should appear. Defaults to 0. Note: for backward compatibility the entire $args argument is treated as an integer and used for this argument if it is not found to be an array.
type
The type of comment (not used directly). Defaults to 'all'.
per_page
Number of comments per page. Defaults to 0.
max_depth
Maximum depth to be considered for comments, when threaded (not used directly). Defaults to ''

Top ↑

Source

File: wp-includes/comment-template.php

function get_comment_link( $comment = null, $args = array() ) {
	global $wp_rewrite, $in_comment_loop;

	$comment = get_comment( $comment );

	// Back-compat.
	if ( ! is_array( $args ) ) {
		$args = array( 'page' => $args );
	}

	$defaults = array(
		'type'      => 'all',
		'page'      => '',
		'per_page'  => '',
		'max_depth' => '',
		'cpage'     => null,
	);
	$args     = wp_parse_args( $args, $defaults );

	$link = get_permalink( $comment->comment_post_ID );

	// The 'cpage' param takes precedence.
	if ( ! is_null( $args['cpage'] ) ) {
		$cpage = $args['cpage'];

		// No 'cpage' is provided, so we calculate one.
	} else {
		if ( '' === $args['per_page'] && get_option( 'page_comments' ) ) {
			$args['per_page'] = get_option( 'comments_per_page' );
		}

		if ( empty( $args['per_page'] ) ) {
			$args['per_page'] = 0;
			$args['page']     = 0;
		}

		$cpage = $args['page'];

		if ( '' == $cpage ) {
			if ( ! empty( $in_comment_loop ) ) {
				$cpage = get_query_var( 'cpage' );
			} else {
				// Requires a database hit, so we only do it when we can't figure out from context.
				$cpage = get_page_of_comment( $comment->comment_ID, $args );
			}
		}

		/*
		 * If the default page displays the oldest comments, the permalinks for comments on the default page
		 * do not need a 'cpage' query var.
		 */
		if ( 'oldest' === get_option( 'default_comments_page' ) && 1 === $cpage ) {
			$cpage = '';
		}
	}

	if ( $cpage && get_option( 'page_comments' ) ) {
		if ( $wp_rewrite->using_permalinks() ) {
			if ( $cpage ) {
				$link = trailingslashit( $link ) . $wp_rewrite->comments_pagination_base . '-' . $cpage;
			}

			$link = user_trailingslashit( $link, 'comment' );
		} elseif ( $cpage ) {
			$link = add_query_arg( 'cpage', $cpage, $link );
		}
	}

	if ( $wp_rewrite->using_permalinks() ) {
		$link = user_trailingslashit( $link, 'comment' );
	}

	$link = $link . '#comment-' . $comment->comment_ID;

	/**
	 * Filters the returned single comment permalink.
	 *
	 * @since 2.8.0
	 * @since 4.4.0 Added the `$cpage` parameter.
	 *
	 * @see get_page_of_comment()
	 *
	 * @param string     $link    The comment permalink with '#comment-$id' appended.
	 * @param WP_Comment $comment The current comment object.
	 * @param array      $args    An array of arguments to override the defaults.
	 * @param int        $cpage   The calculated 'cpage' value.
	 */
	return apply_filters( 'get_comment_link', $link, $comment, $args, $cpage );
}


Top ↑

Changelog

Changelog
VersionDescription
4.4.0Added the ability for $comment to also accept a WP_Comment object. Added $cpage argument.
1.5.0Introduced.

The content displayed on this page has been created in part by processing WordPress source code files which are made available under the GPLv2 (or a later version) license by theĀ Free Software Foundation. In addition to this, the content includes user-written examples and information. All material is subject to review and curation by the WPPaste.com community.

Show More
Show More