Title: WP_Widget_Recent_Comments::widget
Published: April 25, 2014
Last modified: August 20, 2026

---

# WP_Widget_Recent_Comments::widget( array $args, array $instance )

## In this article

 * [Parameters](https://developer.wordpress.org/reference/classes/wp_widget_recent_comments/widget/?output_format=md#parameters)
 * [Source](https://developer.wordpress.org/reference/classes/wp_widget_recent_comments/widget/?output_format=md#source)
 * [Hooks](https://developer.wordpress.org/reference/classes/wp_widget_recent_comments/widget/?output_format=md#hooks)
 * [Related](https://developer.wordpress.org/reference/classes/wp_widget_recent_comments/widget/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_widget_recent_comments/widget/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/wp_widget_recent_comments/widget/?output_format=md#wp--skip-link--target)

Outputs the content for the current Recent Comments widget instance.

## 󠀁[Parameters](https://developer.wordpress.org/reference/classes/wp_widget_recent_comments/widget/?output_format=md#parameters)󠁿

 `$args`arrayrequired

Display arguments including `'before_title'`, `'after_title'`, `'before_widget'`,
and `'after_widget'`.

`$instance`arrayrequired

Settings for the current Recent Comments widget instance.

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wp_widget_recent_comments/widget/?output_format=md#source)󠁿

    ```php
    public function widget( $args, $instance ) {
    	static $first_instance = true;

    	if ( ! isset( $args['widget_id'] ) ) {
    		$args['widget_id'] = $this->id;
    	}

    	$output = '';

    	$default_title = __( 'Recent Comments' );
    	$title         = ( ! empty( $instance['title'] ) ) ? $instance['title'] : $default_title;

    	/** This filter is documented in wp-includes/widgets/class-wp-widget-pages.php */
    	$title = apply_filters( 'widget_title', $title, $instance, $this->id_base );

    	$number = ( ! empty( $instance['number'] ) ) ? absint( $instance['number'] ) : 5;
    	if ( ! $number ) {
    		$number = 5;
    	}

    	$comments = get_comments(
    		/**
    		 * Filters the arguments for the Recent Comments widget.
    		 *
    		 * @since 3.4.0
    		 * @since 4.9.0 Added the `$instance` parameter.
    		 *
    		 * @see WP_Comment_Query::query() for information on accepted arguments.
    		 *
    		 * @param array $comment_args An array of arguments used to retrieve the recent comments.
    		 * @param array $instance     Array of settings for the current widget.
    		 */
    		apply_filters(
    			'widget_comments_args',
    			array(
    				'number'      => $number,
    				'status'      => 'approve',
    				'post_status' => 'publish',
    			),
    			$instance
    		)
    	);

    	$output .= $args['before_widget'];
    	if ( $title ) {
    		$output .= $args['before_title'] . $title . $args['after_title'];
    	}

    	$recent_comments_id = ( $first_instance ) ? 'recentcomments' : "recentcomments-{$this->number}";
    	$first_instance     = false;

    	$format = current_theme_supports( 'html5', 'navigation-widgets' ) ? 'html5' : 'xhtml';

    	/** This filter is documented in wp-includes/widgets/class-wp-nav-menu-widget.php */
    	$format = apply_filters( 'navigation_widgets_format', $format );

    	if ( 'html5' === $format ) {
    		// The title may be filtered: Strip out HTML and make sure the aria-label is never empty.
    		$title      = trim( strip_tags( $title ) );
    		$aria_label = $title ? $title : $default_title;
    		$output    .= '<nav aria-label="' . esc_attr( $aria_label ) . '">';
    	}

    	$output .= '<ul id="' . esc_attr( $recent_comments_id ) . '">';
    	if ( is_array( $comments ) && $comments ) {
    		// Prime cache for associated posts. (Prime post term cache if we need it for permalinks.)
    		$post_ids = array_unique( wp_list_pluck( $comments, 'comment_post_ID' ) );
    		_prime_post_caches( $post_ids, strpos( get_option( 'permalink_structure' ), '%category%' ), false );

    		foreach ( (array) $comments as $comment ) {
    			$output .= '<li class="recentcomments">';
    			$output .= sprintf(
    				/* translators: Comments widget. 1: Comment author, 2: Post link. */
    				_x( '%1$s on %2$s', 'widgets' ),
    				'<span class="comment-author-link">' . get_comment_author_link( $comment ) . '</span>',
    				'<a href="' . esc_url( get_comment_link( $comment ) ) . '">' . get_the_title( $comment->comment_post_ID ) . '</a>'
    			);
    			$output .= '</li>';
    		}
    	}
    	$output .= '</ul>';

    	if ( 'html5' === $format ) {
    		$output .= '</nav>';
    	}

    	$output .= $args['after_widget'];

    	echo $output;
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/widgets/class-wp-widget-recent-comments.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.1/src/wp-includes/widgets/class-wp-widget-recent-comments.php#L72)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.1/src/wp-includes/widgets/class-wp-widget-recent-comments.php#L72-L161)

## 󠀁[Hooks](https://developer.wordpress.org/reference/classes/wp_widget_recent_comments/widget/?output_format=md#hooks)󠁿

 [apply_filters( ‘navigation_widgets_format’, string $format )](https://developer.wordpress.org/reference/hooks/navigation_widgets_format/)

Filters the HTML format of widgets with navigation links.

 [apply_filters( ‘widget_comments_args’, array $comment_args, array $instance )](https://developer.wordpress.org/reference/hooks/widget_comments_args/)

Filters the arguments for the Recent Comments widget.

 [apply_filters( ‘widget_title’, string $title, array $instance, mixed $id_base )](https://developer.wordpress.org/reference/hooks/widget_title/)

Filters the widget title.

## 󠀁[Related](https://developer.wordpress.org/reference/classes/wp_widget_recent_comments/widget/?output_format=md#related)󠁿

| Uses | Description | 
| [wp_list_pluck()](https://developer.wordpress.org/reference/functions/wp_list_pluck/)`wp-includes/functions.php` |

Plucks a certain field out of each object or array in an array.

  | 
| [get_the_title()](https://developer.wordpress.org/reference/functions/get_the_title/)`wp-includes/post-template.php` |

Retrieves the post title.

  | 
| [_prime_post_caches()](https://developer.wordpress.org/reference/functions/_prime_post_caches/)`wp-includes/post.php` |

Adds any posts from the given IDs to the cache that do not already exist in cache.

  | 
| [get_comment_link()](https://developer.wordpress.org/reference/functions/get_comment_link/)`wp-includes/comment-template.php` |

Retrieves the link to a given comment.

  | 
| [get_comment_author_link()](https://developer.wordpress.org/reference/functions/get_comment_author_link/)`wp-includes/comment-template.php` |

Retrieves the HTML link to the URL of the author of the current comment.

  | 
| [get_comments()](https://developer.wordpress.org/reference/functions/get_comments/)`wp-includes/comment.php` |

Retrieves a list of comments.

  | 
| [current_theme_supports()](https://developer.wordpress.org/reference/functions/current_theme_supports/)`wp-includes/theme.php` |

Checks a theme’s support for a given feature.

  | 
| [__()](https://developer.wordpress.org/reference/functions/__/)`wp-includes/l10n.php` |

Retrieves the translation of $text.

  | 
| [_x()](https://developer.wordpress.org/reference/functions/_x/)`wp-includes/l10n.php` |

Retrieves translated string with gettext context.

  | 
| [esc_attr()](https://developer.wordpress.org/reference/functions/esc_attr/)`wp-includes/formatting.php` |

Escaping for HTML attributes.

  | 
| [esc_url()](https://developer.wordpress.org/reference/functions/esc_url/)`wp-includes/formatting.php` |

Checks and cleans a URL.

  | 
| [absint()](https://developer.wordpress.org/reference/functions/absint/)`wp-includes/load.php` |

Converts a value to non-negative integer.

  | 
| [apply_filters()](https://developer.wordpress.org/reference/functions/apply_filters/)`wp-includes/plugin.php` |

Calls the callback functions that have been added to a filter hook.

  | 
| [get_option()](https://developer.wordpress.org/reference/functions/get_option/)`wp-includes/option.php` |

Retrieves an option value based on an option name.

  |

[Show 9 more](https://developer.wordpress.org/reference/classes/wp_widget_recent_comments/widget/?output_format=md#)
[Show less](https://developer.wordpress.org/reference/classes/wp_widget_recent_comments/widget/?output_format=md#)

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_widget_recent_comments/widget/?output_format=md#changelog)󠁿

| Version | Description | 
| [5.4.0](https://developer.wordpress.org/reference/since/5.4.0/) | Creates a unique HTML ID for the `<ul>` element if more than one instance is displayed on the page. | 
| [2.8.0](https://developer.wordpress.org/reference/since/2.8.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_widget_recent_comments%2Fwidget%2F)
before being able to contribute a note or feedback.