wordpress / latest / functions / get_comment_link.html

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

Retrieves the link to a given comment.

Description

See also

Parameters

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

Default: null

$args array Optional
An array of optional arguments to override the defaults.
  • typestring
    Passed to get_page_of_comment() .
  • pageint
    Current page of comments, for calculating comment pagination.
  • per_pageint
    Per-page value for comment pagination.
  • max_depthint
    Passed to get_page_of_comment() .
  • cpageint|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.
More Arguments from get_page_of_comment( ... $args ) Array of optional arguments.
  • typestring
    Limit paginated comments to those matching a given type.
    Accepts 'comment', 'trackback', 'pingback', 'pings' (trackbacks and pingbacks), or 'all'. Default 'all'.
  • per_pageint
    Per-page count to use when calculating pagination.
    Defaults to the value of the 'comments_per_page' option.
  • max_depthint|string
    If greater than 1, comment page will be determined for the top-level parent $comment_ID.
    Defaults to the value of the 'thread_comments_depth' option.

Default: array()

Return

string The permalink to the given comment.

More Information

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 ''

Source

File: wp-includes/comment-template.php. View all references

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 );
}

Hooks

Uses

Uses Description

Used By

Used By Description

Changelog

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

© 2003–2022 WordPress Foundation
Licensed under the GNU GPLv2+ License.
https://developer.wordpress.org/reference/functions/get_comment_link