wp/wp-includes/comment.php
changeset 9 177826044cd9
parent 7 cf61fcea0001
child 16 a86126ab1dd4
--- a/wp/wp-includes/comment.php	Mon Oct 14 18:06:33 2019 +0200
+++ b/wp/wp-includes/comment.php	Mon Oct 14 18:28:13 2019 +0200
@@ -33,15 +33,16 @@
  * @param string $user_ip      Comment author IP address.
  * @param string $user_agent   Comment author User-Agent.
  * @param string $comment_type Comment type, either user-submitted comment,
- *		                       trackback, or pingback.
+ *                             trackback, or pingback.
  * @return bool If all checks pass, true, otherwise false.
  */
-function check_comment($author, $email, $url, $comment, $user_ip, $user_agent, $comment_type) {
+function check_comment( $author, $email, $url, $comment, $user_ip, $user_agent, $comment_type ) {
 	global $wpdb;
 
 	// If manual moderation is enabled, skip all checks and return false.
-	if ( 1 == get_option('comment_moderation') )
+	if ( 1 == get_option( 'comment_moderation' ) ) {
 		return false;
+	}
 
 	/** This filter is documented in wp-includes/comment-template.php */
 	$comment = apply_filters( 'comment_text', $comment, null, array() );
@@ -66,40 +67,54 @@
 		 * If the number of links in the comment exceeds the allowed amount,
 		 * fail the check by returning false.
 		 */
-		if ( $num_links >= $max_links )
+		if ( $num_links >= $max_links ) {
 			return false;
+		}
 	}
 
-	$mod_keys = trim(get_option('moderation_keys'));
+	$mod_keys = trim( get_option( 'moderation_keys' ) );
 
 	// If moderation 'keys' (keywords) are set, process them.
-	if ( !empty($mod_keys) ) {
-		$words = explode("\n", $mod_keys );
-
-		foreach ( (array) $words as $word) {
-			$word = trim($word);
+	if ( ! empty( $mod_keys ) ) {
+		$words = explode( "\n", $mod_keys );
+
+		foreach ( (array) $words as $word ) {
+			$word = trim( $word );
 
 			// Skip empty lines.
-			if ( empty($word) )
+			if ( empty( $word ) ) {
 				continue;
+			}
 
 			/*
 			 * Do some escaping magic so that '#' (number of) characters in the spam
 			 * words don't break things:
 			 */
-			$word = preg_quote($word, '#');
+			$word = preg_quote( $word, '#' );
 
 			/*
 			 * Check the comment fields for moderation keywords. If any are found,
 			 * fail the check for the given field by returning false.
 			 */
 			$pattern = "#$word#i";
-			if ( preg_match($pattern, $author) ) return false;
-			if ( preg_match($pattern, $email) ) return false;
-			if ( preg_match($pattern, $url) ) return false;
-			if ( preg_match($pattern, $comment) ) return false;
-			if ( preg_match($pattern, $user_ip) ) return false;
-			if ( preg_match($pattern, $user_agent) ) return false;
+			if ( preg_match( $pattern, $author ) ) {
+				return false;
+			}
+			if ( preg_match( $pattern, $email ) ) {
+				return false;
+			}
+			if ( preg_match( $pattern, $url ) ) {
+				return false;
+			}
+			if ( preg_match( $pattern, $comment ) ) {
+				return false;
+			}
+			if ( preg_match( $pattern, $user_ip ) ) {
+				return false;
+			}
+			if ( preg_match( $pattern, $user_agent ) ) {
+				return false;
+			}
 		}
 	}
 
@@ -110,7 +125,7 @@
 	 * as well as whether there are any moderation keywords (if set) present in the author
 	 * email address. If both checks pass, return true. Otherwise, return false.
 	 */
-	if ( 1 == get_option('comment_whitelist')) {
+	if ( 1 == get_option( 'comment_whitelist' ) ) {
 		if ( 'trackback' != $comment_type && 'pingback' != $comment_type && $author != '' && $email != '' ) {
 			$comment_user = get_user_by( 'email', wp_unslash( $email ) );
 			if ( ! empty( $comment_user->ID ) ) {
@@ -120,10 +135,11 @@
 				$ok_to_comment = $wpdb->get_var( $wpdb->prepare( "SELECT comment_approved FROM $wpdb->comments WHERE comment_author = %s AND comment_author_email = %s and comment_approved = '1' LIMIT 1", $author, $email ) );
 			}
 			if ( ( 1 == $ok_to_comment ) &&
-				( empty($mod_keys) || false === strpos( $email, $mod_keys) ) )
+				( empty( $mod_keys ) || false === strpos( $email, $mod_keys ) ) ) {
 					return true;
-			else
+			} else {
 				return false;
+			}
 		} else {
 			return false;
 		}
@@ -152,7 +168,7 @@
 		'post_id' => $post_id,
 		'order'   => 'ASC',
 	);
-	$r = wp_parse_args( $args, $defaults );
+	$r        = wp_parse_args( $args, $defaults );
 
 	$query = new WP_Comment_Query;
 	return $query->query( $r );
@@ -238,10 +254,10 @@
  */
 function get_comment_statuses() {
 	$status = array(
-		'hold'		=> __( 'Unapproved' ),
-		'approve'	=> _x( 'Approved', 'comment status' ),
-		'spam'		=> _x( 'Spam', 'comment status' ),
-		'trash'		=> _x( 'Trash', 'comment status' ),
+		'hold'    => __( 'Unapproved' ),
+		'approve' => _x( 'Approved', 'comment status' ),
+		'spam'    => _x( 'Spam', 'comment status' ),
+		'trash'   => _x( 'Trash', 'comment status' ),
 	);
 
 	return $status;
@@ -258,14 +274,14 @@
  */
 function get_default_comment_status( $post_type = 'post', $comment_type = 'comment' ) {
 	switch ( $comment_type ) {
-		case 'pingback' :
-		case 'trackback' :
+		case 'pingback':
+		case 'trackback':
 			$supports = 'trackbacks';
-			$option = 'ping';
+			$option   = 'ping';
 			break;
-		default :
+		default:
 			$supports = 'comments';
-			$option = 'comment';
+			$option   = 'comment';
 	}
 
 	// Set the status.
@@ -287,7 +303,7 @@
 	 * @param string $post_type    Post type. Default is `post`.
 	 * @param string $comment_type Type of comment. Default is `comment`.
 	 */
-	return apply_filters( 'get_default_comment_status' , $status, $post_type, $comment_type );
+	return apply_filters( 'get_default_comment_status', $status, $post_type, $comment_type );
 }
 
 /**
@@ -306,7 +322,7 @@
 	global $wpdb;
 
 	$timezone = strtolower( $timezone );
-	$key = "lastcommentmodified:$timezone";
+	$key      = "lastcommentmodified:$timezone";
 
 	$comment_modified_date = wp_cache_get( $key, 'timeinfo' );
 	if ( false !== $comment_modified_date ) {
@@ -356,15 +372,18 @@
 
 	$where = '';
 	if ( $post_id > 0 ) {
-		$where = $wpdb->prepare("WHERE comment_post_ID = %d", $post_id);
+		$where = $wpdb->prepare( 'WHERE comment_post_ID = %d', $post_id );
 	}
 
-	$totals = (array) $wpdb->get_results("
+	$totals = (array) $wpdb->get_results(
+		"
 		SELECT comment_approved, COUNT( * ) AS total
 		FROM {$wpdb->comments}
 		{$where}
 		GROUP BY comment_approved
-	", ARRAY_A);
+	",
+		ARRAY_A
+	);
 
 	$comment_count = array(
 		'approved'            => 0,
@@ -385,18 +404,18 @@
 				$comment_count['post-trashed'] = $row['total'];
 				break;
 			case 'spam':
-				$comment_count['spam'] = $row['total'];
+				$comment_count['spam']            = $row['total'];
 				$comment_count['total_comments'] += $row['total'];
 				break;
 			case '1':
-				$comment_count['approved'] = $row['total'];
+				$comment_count['approved']        = $row['total'];
 				$comment_count['total_comments'] += $row['total'];
-				$comment_count['all'] += $row['total'];
+				$comment_count['all']            += $row['total'];
 				break;
 			case '0':
 				$comment_count['awaiting_moderation'] = $row['total'];
-				$comment_count['total_comments'] += $row['total'];
-				$comment_count['all'] += $row['total'];
+				$comment_count['total_comments']     += $row['total'];
+				$comment_count['all']                += $row['total'];
 				break;
 			default:
 				break;
@@ -422,12 +441,8 @@
  * @param bool $unique Optional, default is false. Whether the same key should not be added.
  * @return int|bool Meta ID on success, false on failure.
  */
-function add_comment_meta($comment_id, $meta_key, $meta_value, $unique = false) {
-	$added = add_metadata( 'comment', $comment_id, $meta_key, $meta_value, $unique );
-	if ( $added ) {
-		wp_cache_set( 'last_changed', microtime(), 'comment' );
-	}
-	return $added;
+function add_comment_meta( $comment_id, $meta_key, $meta_value, $unique = false ) {
+	return add_metadata( 'comment', $comment_id, $meta_key, $meta_value, $unique );
 }
 
 /**
@@ -445,12 +460,8 @@
  * @param mixed $meta_value Optional. Metadata value.
  * @return bool True on success, false on failure.
  */
-function delete_comment_meta($comment_id, $meta_key, $meta_value = '') {
-	$deleted = delete_metadata( 'comment', $comment_id, $meta_key, $meta_value );
-	if ( $deleted ) {
-		wp_cache_set( 'last_changed', microtime(), 'comment' );
-	}
-	return $deleted;
+function delete_comment_meta( $comment_id, $meta_key, $meta_value = '' ) {
+	return delete_metadata( 'comment', $comment_id, $meta_key, $meta_value );
 }
 
 /**
@@ -465,8 +476,8 @@
  * @return mixed Will be an array if $single is false. Will be value of meta data field if $single
  *  is true.
  */
-function get_comment_meta($comment_id, $key = '', $single = false) {
-	return get_metadata('comment', $comment_id, $key, $single);
+function get_comment_meta( $comment_id, $key = '', $single = false ) {
+	return get_metadata( 'comment', $comment_id, $key, $single );
 }
 
 /**
@@ -486,12 +497,8 @@
  * @param mixed $prev_value Optional. Previous value to check before removing.
  * @return int|bool Meta ID if the key didn't exist, true on successful update, false on failure.
  */
-function update_comment_meta($comment_id, $meta_key, $meta_value, $prev_value = '') {
-	$updated = update_metadata( 'comment', $comment_id, $meta_key, $meta_value, $prev_value );
-	if ( $updated ) {
-		wp_cache_set( 'last_changed', microtime(), 'comment' );
-	}
-	return $updated;
+function update_comment_meta( $comment_id, $meta_key, $meta_value, $prev_value = '' ) {
+	return update_metadata( 'comment', $comment_id, $meta_key, $meta_value, $prev_value );
 }
 
 /**
@@ -499,7 +506,7 @@
  *
  * @since 4.5.0
  *
- * @param array $comments Array of comment objects.
+ * @param WP_Comment[] $comments Array of comment objects.
  */
 function wp_queue_comments_for_comment_meta_lazyload( $comments ) {
 	// Don't use `wp_list_pluck()` to avoid by-reference manipulation.
@@ -553,7 +560,7 @@
 	 * @param int $seconds Comment cookie lifetime. Default 30000000.
 	 */
 	$comment_cookie_lifetime = time() + apply_filters( 'comment_cookie_lifetime', 30000000 );
-	$secure = ( 'https' === parse_url( home_url(), PHP_URL_SCHEME ) );
+	$secure                  = ( 'https' === parse_url( home_url(), PHP_URL_SCHEME ) );
 	setcookie( 'comment_author_' . COOKIEHASH, $comment->comment_author, $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );
 	setcookie( 'comment_author_email_' . COOKIEHASH, $comment->comment_author_email, $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );
 	setcookie( 'comment_author_url_' . COOKIEHASH, esc_url( $comment->comment_author_url ), $comment_cookie_lifetime, COOKIEPATH, COOKIE_DOMAIN, $secure );
@@ -568,7 +575,7 @@
  * @since 2.0.4
  */
 function sanitize_comment_cookies() {
-	if ( isset( $_COOKIE['comment_author_' . COOKIEHASH] ) ) {
+	if ( isset( $_COOKIE[ 'comment_author_' . COOKIEHASH ] ) ) {
 		/**
 		 * Filters the comment author's name cookie before it is set.
 		 *
@@ -579,13 +586,13 @@
 		 *
 		 * @param string $author_cookie The comment author name cookie.
 		 */
-		$comment_author = apply_filters( 'pre_comment_author_name', $_COOKIE['comment_author_' . COOKIEHASH] );
-		$comment_author = wp_unslash($comment_author);
-		$comment_author = esc_attr($comment_author);
-		$_COOKIE['comment_author_' . COOKIEHASH] = $comment_author;
+		$comment_author                            = apply_filters( 'pre_comment_author_name', $_COOKIE[ 'comment_author_' . COOKIEHASH ] );
+		$comment_author                            = wp_unslash( $comment_author );
+		$comment_author                            = esc_attr( $comment_author );
+		$_COOKIE[ 'comment_author_' . COOKIEHASH ] = $comment_author;
 	}
 
-	if ( isset( $_COOKIE['comment_author_email_' . COOKIEHASH] ) ) {
+	if ( isset( $_COOKIE[ 'comment_author_email_' . COOKIEHASH ] ) ) {
 		/**
 		 * Filters the comment author's email cookie before it is set.
 		 *
@@ -596,13 +603,13 @@
 		 *
 		 * @param string $author_email_cookie The comment author email cookie.
 		 */
-		$comment_author_email = apply_filters( 'pre_comment_author_email', $_COOKIE['comment_author_email_' . COOKIEHASH] );
-		$comment_author_email = wp_unslash($comment_author_email);
-		$comment_author_email = esc_attr($comment_author_email);
-		$_COOKIE['comment_author_email_'.COOKIEHASH] = $comment_author_email;
+		$comment_author_email                            = apply_filters( 'pre_comment_author_email', $_COOKIE[ 'comment_author_email_' . COOKIEHASH ] );
+		$comment_author_email                            = wp_unslash( $comment_author_email );
+		$comment_author_email                            = esc_attr( $comment_author_email );
+		$_COOKIE[ 'comment_author_email_' . COOKIEHASH ] = $comment_author_email;
 	}
 
-	if ( isset( $_COOKIE['comment_author_url_' . COOKIEHASH] ) ) {
+	if ( isset( $_COOKIE[ 'comment_author_url_' . COOKIEHASH ] ) ) {
 		/**
 		 * Filters the comment author's URL cookie before it is set.
 		 *
@@ -613,9 +620,9 @@
 		 *
 		 * @param string $author_url_cookie The comment author URL cookie.
 		 */
-		$comment_author_url = apply_filters( 'pre_comment_author_url', $_COOKIE['comment_author_url_' . COOKIEHASH] );
-		$comment_author_url = wp_unslash($comment_author_url);
-		$_COOKIE['comment_author_url_'.COOKIEHASH] = $comment_author_url;
+		$comment_author_url                            = apply_filters( 'pre_comment_author_url', $_COOKIE[ 'comment_author_url_' . COOKIEHASH ] );
+		$comment_author_url                            = wp_unslash( $comment_author_url );
+		$_COOKIE[ 'comment_author_url_' . COOKIEHASH ] = $comment_author_url;
 	}
 }
 
@@ -648,12 +655,12 @@
 	);
 	if ( $commentdata['comment_author_email'] ) {
 		$dupe .= $wpdb->prepare(
-			"AND comment_author_email = %s ",
+			'AND comment_author_email = %s ',
 			wp_unslash( $commentdata['comment_author_email'] )
 		);
 	}
 	$dupe .= $wpdb->prepare(
-		") AND comment_content = %s LIMIT 1",
+		') AND comment_content = %s LIMIT 1',
 		wp_unslash( $commentdata['comment_content'] )
 	);
 
@@ -680,14 +687,24 @@
 		 * @param array $commentdata Comment data.
 		 */
 		do_action( 'comment_duplicate_trigger', $commentdata );
+
+		/**
+		 * Filters duplicate comment error message.
+		 *
+		 * @since 5.2.0
+		 *
+		 * @param string $comment_duplicate_message Duplicate comment error message.
+		 */
+		$comment_duplicate_message = apply_filters( 'comment_duplicate_message', __( 'Duplicate comment detected; it looks as though you’ve already said that!' ) );
+
 		if ( true === $avoid_die ) {
-			return new WP_Error( 'comment_duplicate', __( 'Duplicate comment detected; it looks as though you’ve already said that!' ), 409 );
+			return new WP_Error( 'comment_duplicate', $comment_duplicate_message, 409 );
 		} else {
 			if ( wp_doing_ajax() ) {
-				die( __('Duplicate comment detected; it looks as though you’ve already said that!') );
+				die( $comment_duplicate_message );
 			}
 
-			wp_die( __( 'Duplicate comment detected; it looks as though you’ve already said that!' ), 409 );
+			wp_die( $comment_duplicate_message, 409 );
 		}
 	}
 
@@ -737,15 +754,20 @@
 	);
 
 	if ( $is_flood ) {
-		return new WP_Error( 'comment_flood', __( 'You are posting comments too quickly. Slow down.' ), 429 );
+		/** This filter is documented in wp-includes/comment-template.php */
+		$comment_flood_message = apply_filters( 'comment_flood_message', __( 'You are posting comments too quickly. Slow down.' ) );
+
+		return new WP_Error( 'comment_flood', $comment_flood_message, 429 );
 	}
 
 	if ( ! empty( $commentdata['user_id'] ) ) {
-		$user = get_userdata( $commentdata['user_id'] );
-		$post_author = $wpdb->get_var( $wpdb->prepare(
-			"SELECT post_author FROM $wpdb->posts WHERE ID = %d LIMIT 1",
-			$commentdata['comment_post_ID']
-		) );
+		$user        = get_userdata( $commentdata['user_id'] );
+		$post_author = $wpdb->get_var(
+			$wpdb->prepare(
+				"SELECT post_author FROM $wpdb->posts WHERE ID = %d LIMIT 1",
+				$commentdata['comment_post_ID']
+			)
+		);
 	}
 
 	if ( isset( $user ) && ( $commentdata['user_id'] == $post_author || $user->has_cap( 'moderate_comments' ) ) ) {
@@ -842,14 +864,14 @@
 	$hour_ago = gmdate( 'Y-m-d H:i:s', time() - HOUR_IN_SECONDS );
 
 	if ( is_user_logged_in() ) {
-		$user = get_current_user_id();
+		$user         = get_current_user_id();
 		$check_column = '`user_id`';
 	} else {
-		$user = $ip;
+		$user         = $ip;
 		$check_column = '`comment_author_IP`';
 	}
 
-	$sql = $wpdb->prepare(
+	$sql      = $wpdb->prepare(
 		"SELECT `comment_date_gmt` FROM `$wpdb->comments` WHERE `comment_date_gmt` >= %s AND ( $check_column = %s OR `comment_author_email` = %s ) ORDER BY `comment_date_gmt` DESC LIMIT 1",
 		$hour_ago,
 		$user,
@@ -857,8 +879,8 @@
 	);
 	$lasttime = $wpdb->get_var( $sql );
 	if ( $lasttime ) {
-		$time_lastcomment = mysql2date('U', $lasttime, false);
-		$time_newcomment  = mysql2date('U', $date, false);
+		$time_lastcomment = mysql2date( 'U', $lasttime, false );
+		$time_newcomment  = mysql2date( 'U', $date, false );
 		/**
 		 * Filters the comment flood status.
 		 *
@@ -879,14 +901,24 @@
 			 * @param int $time_newcomment  Timestamp of when the new comment was posted.
 			 */
 			do_action( 'comment_flood_trigger', $time_lastcomment, $time_newcomment );
+
 			if ( true === $avoid_die ) {
 				return true;
 			} else {
+				/**
+				 * Filters the comment flood error message.
+				 *
+				 * @since 5.2.0
+				 *
+				 * @param string $comment_flood_message Comment flood error message.
+				 */
+				$comment_flood_message = apply_filters( 'comment_flood_message', __( 'You are posting comments too quickly. Slow down.' ) );
+
 				if ( wp_doing_ajax() ) {
-					die( __('You are posting comments too quickly. Slow down.') );
+					die( $comment_flood_message );
 				}
 
-				wp_die( __( 'You are posting comments too quickly. Slow down.' ), 429 );
+				wp_die( $comment_flood_message, 429 );
 			}
 		}
 	}
@@ -899,19 +931,26 @@
  *
  * @since 2.7.0
  *
- * @param array $comments Array of comments
- * @return array Array of comments keyed by comment_type.
+ * @param WP_Comment[] $comments Array of comments
+ * @return WP_Comment[] Array of comments keyed by comment_type.
  */
-function separate_comments(&$comments) {
-	$comments_by_type = array('comment' => array(), 'trackback' => array(), 'pingback' => array(), 'pings' => array());
-	$count = count($comments);
+function separate_comments( &$comments ) {
+	$comments_by_type = array(
+		'comment'   => array(),
+		'trackback' => array(),
+		'pingback'  => array(),
+		'pings'     => array(),
+	);
+	$count            = count( $comments );
 	for ( $i = 0; $i < $count; $i++ ) {
-		$type = $comments[$i]->comment_type;
-		if ( empty($type) )
+		$type = $comments[ $i ]->comment_type;
+		if ( empty( $type ) ) {
 			$type = 'comment';
-		$comments_by_type[$type][] = &$comments[$i];
-		if ( 'trackback' == $type || 'pingback' == $type )
-			$comments_by_type['pings'][] = &$comments[$i];
+		}
+		$comments_by_type[ $type ][] = &$comments[ $i ];
+		if ( 'trackback' == $type || 'pingback' == $type ) {
+			$comments_by_type['pings'][] = &$comments[ $i ];
+		}
 	}
 
 	return $comments_by_type;
@@ -926,40 +965,47 @@
  *
  * @global WP_Query $wp_query
  *
- * @param array $comments Optional array of WP_Comment objects. Defaults to $wp_query->comments
- * @param int   $per_page Optional comments per page.
- * @param bool  $threaded Optional control over flat or threaded comments.
+ * @param WP_Comment[] $comments Optional. Array of WP_Comment objects. Defaults to $wp_query->comments.
+ * @param int          $per_page Optional. Comments per page.
+ * @param bool         $threaded Optional. Control over flat or threaded comments.
  * @return int Number of comment pages.
  */
 function get_comment_pages_count( $comments = null, $per_page = null, $threaded = null ) {
 	global $wp_query;
 
-	if ( null === $comments && null === $per_page && null === $threaded && !empty($wp_query->max_num_comment_pages) )
+	if ( null === $comments && null === $per_page && null === $threaded && ! empty( $wp_query->max_num_comment_pages ) ) {
 		return $wp_query->max_num_comment_pages;
-
-	if ( ( ! $comments || ! is_array( $comments ) ) && ! empty( $wp_query->comments )  )
+	}
+
+	if ( ( ! $comments || ! is_array( $comments ) ) && ! empty( $wp_query->comments ) ) {
 		$comments = $wp_query->comments;
-
-	if ( empty($comments) )
+	}
+
+	if ( empty( $comments ) ) {
 		return 0;
+	}
 
 	if ( ! get_option( 'page_comments' ) ) {
 		return 1;
 	}
 
-	if ( !isset($per_page) )
-		$per_page = (int) get_query_var('comments_per_page');
-	if ( 0 === $per_page )
-		$per_page = (int) get_option('comments_per_page');
-	if ( 0 === $per_page )
+	if ( ! isset( $per_page ) ) {
+		$per_page = (int) get_query_var( 'comments_per_page' );
+	}
+	if ( 0 === $per_page ) {
+		$per_page = (int) get_option( 'comments_per_page' );
+	}
+	if ( 0 === $per_page ) {
 		return 1;
-
-	if ( !isset($threaded) )
-		$threaded = get_option('thread_comments');
+	}
+
+	if ( ! isset( $threaded ) ) {
+		$threaded = get_option( 'thread_comments' );
+	}
 
 	if ( $threaded ) {
 		$walker = new Walker_Comment;
-		$count = ceil( $walker->get_number_of_root_elements( $comments ) / $per_page );
+		$count  = ceil( $walker->get_number_of_root_elements( $comments ) / $per_page );
 	} else {
 		$count = ceil( count( $comments ) / $per_page );
 	}
@@ -992,11 +1038,17 @@
 
 	$page = null;
 
-	if ( !$comment = get_comment( $comment_ID ) )
+	if ( ! $comment = get_comment( $comment_ID ) ) {
 		return;
-
-	$defaults = array( 'type' => 'all', 'page' => '', 'per_page' => '', 'max_depth' => '' );
-	$args = wp_parse_args( $args, $defaults );
+	}
+
+	$defaults      = array(
+		'type'      => 'all',
+		'page'      => '',
+		'per_page'  => '',
+		'max_depth' => '',
+	);
+	$args          = wp_parse_args( $args, $defaults );
 	$original_args = $args;
 
 	// Order of precedence: 1. `$args['per_page']`, 2. 'comments_per_page' query_var, 3. 'comments_per_page' option.
@@ -1010,9 +1062,9 @@
 		}
 	}
 
-	if ( empty($args['per_page']) ) {
+	if ( empty( $args['per_page'] ) ) {
 		$args['per_page'] = 0;
-		$args['page'] = 0;
+		$args['page']     = 0;
 	}
 
 	if ( $args['per_page'] < 1 ) {
@@ -1021,15 +1073,17 @@
 
 	if ( null === $page ) {
 		if ( '' === $args['max_depth'] ) {
-			if ( get_option('thread_comments') )
-				$args['max_depth'] = get_option('thread_comments_depth');
-			else
+			if ( get_option( 'thread_comments' ) ) {
+				$args['max_depth'] = get_option( 'thread_comments_depth' );
+			} else {
 				$args['max_depth'] = -1;
+			}
 		}
 
 		// Find this comment's top level parent if threading is enabled
-		if ( $args['max_depth'] > 1 && 0 != $comment->comment_parent )
+		if ( $args['max_depth'] > 1 && 0 != $comment->comment_parent ) {
 			return get_page_of_comment( $comment->comment_parent, $args );
+		}
 
 		$comment_args = array(
 			'type'       => $args['type'],
@@ -1042,18 +1096,18 @@
 				array(
 					'column' => "$wpdb->comments.comment_date_gmt",
 					'before' => $comment->comment_date_gmt,
-				)
+				),
 			),
 		);
 
-		$comment_query = new WP_Comment_Query();
+		$comment_query       = new WP_Comment_Query();
 		$older_comment_count = $comment_query->query( $comment_args );
 
 		// No older comments? Then it's page #1.
 		if ( 0 == $older_comment_count ) {
 			$page = 1;
 
-		// Divide comments older than this one by comments per page to get this comment's page number
+			// Divide comments older than this one by comments per page to get this comment's page number
 		} else {
 			$page = ceil( ( $older_comment_count + 1 ) / $args['per_page'] );
 		}
@@ -1188,7 +1242,7 @@
  * @param string $user_agent The author's browser user agent
  * @return bool True if comment contains blacklisted content, false if comment does not
  */
-function wp_blacklist_check($author, $email, $url, $comment, $user_ip, $user_agent) {
+function wp_blacklist_check( $author, $email, $url, $comment, $user_ip, $user_agent ) {
 	/**
 	 * Fires before the comment is tested for blacklisted characters or words.
 	 *
@@ -1203,36 +1257,38 @@
 	 */
 	do_action( 'wp_blacklist_check', $author, $email, $url, $comment, $user_ip, $user_agent );
 
-	$mod_keys = trim( get_option('blacklist_keys') );
-	if ( '' == $mod_keys )
+	$mod_keys = trim( get_option( 'blacklist_keys' ) );
+	if ( '' == $mod_keys ) {
 		return false; // If moderation keys are empty
+	}
 
 	// Ensure HTML tags are not being used to bypass the blacklist.
 	$comment_without_html = wp_strip_all_tags( $comment );
 
-	$words = explode("\n", $mod_keys );
+	$words = explode( "\n", $mod_keys );
 
 	foreach ( (array) $words as $word ) {
-		$word = trim($word);
+		$word = trim( $word );
 
 		// Skip empty lines
-		if ( empty($word) ) { continue; }
+		if ( empty( $word ) ) {
+			continue; }
 
 		// Do some escaping magic so that '#' chars in the
 		// spam words don't break things:
-		$word = preg_quote($word, '#');
+		$word = preg_quote( $word, '#' );
 
 		$pattern = "#$word#i";
-		if (
-			   preg_match($pattern, $author)
-			|| preg_match($pattern, $email)
-			|| preg_match($pattern, $url)
-			|| preg_match($pattern, $comment)
-			|| preg_match($pattern, $comment_without_html)
-			|| preg_match($pattern, $user_ip)
-			|| preg_match($pattern, $user_agent)
-		 )
+		if ( preg_match( $pattern, $author )
+			|| preg_match( $pattern, $email )
+			|| preg_match( $pattern, $url )
+			|| preg_match( $pattern, $comment )
+			|| preg_match( $pattern, $comment_without_html )
+			|| preg_match( $pattern, $user_ip )
+			|| preg_match( $pattern, $user_agent )
+		) {
 			return true;
+		}
 	}
 	return false;
 }
@@ -1274,7 +1330,7 @@
 		return $count;
 	}
 
-	$stats = get_comment_count( $post_id );
+	$stats              = get_comment_count( $post_id );
 	$stats['moderated'] = $stats['awaiting_moderation'];
 	unset( $stats['awaiting_moderation'] );
 
@@ -1301,13 +1357,15 @@
  * @param bool           $force_delete Whether to bypass trash and force deletion. Default is false.
  * @return bool True on success, false on failure.
  */
-function wp_delete_comment($comment_id, $force_delete = false) {
+function wp_delete_comment( $comment_id, $force_delete = false ) {
 	global $wpdb;
-	if (!$comment = get_comment($comment_id))
+	if ( ! $comment = get_comment( $comment_id ) ) {
 		return false;
-
-	if ( !$force_delete && EMPTY_TRASH_DAYS && !in_array( wp_get_comment_status( $comment ), array( 'trash', 'spam' ) ) )
-		return wp_trash_comment($comment_id);
+	}
+
+	if ( ! $force_delete && EMPTY_TRASH_DAYS && ! in_array( wp_get_comment_status( $comment ), array( 'trash', 'spam' ) ) ) {
+		return wp_trash_comment( $comment_id );
+	}
 
 	/**
 	 * Fires immediately before a comment is deleted from the database.
@@ -1321,19 +1379,21 @@
 	do_action( 'delete_comment', $comment->comment_ID, $comment );
 
 	// Move children up a level.
-	$children = $wpdb->get_col( $wpdb->prepare("SELECT comment_ID FROM $wpdb->comments WHERE comment_parent = %d", $comment->comment_ID) );
-	if ( !empty($children) ) {
-		$wpdb->update($wpdb->comments, array('comment_parent' => $comment->comment_parent), array('comment_parent' => $comment->comment_ID));
-		clean_comment_cache($children);
+	$children = $wpdb->get_col( $wpdb->prepare( "SELECT comment_ID FROM $wpdb->comments WHERE comment_parent = %d", $comment->comment_ID ) );
+	if ( ! empty( $children ) ) {
+		$wpdb->update( $wpdb->comments, array( 'comment_parent' => $comment->comment_parent ), array( 'comment_parent' => $comment->comment_ID ) );
+		clean_comment_cache( $children );
 	}
 
 	// Delete metadata
 	$meta_ids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->commentmeta WHERE comment_id = %d", $comment->comment_ID ) );
-	foreach ( $meta_ids as $mid )
+	foreach ( $meta_ids as $mid ) {
 		delete_metadata_by_mid( 'comment', $mid );
-
-	if ( ! $wpdb->delete( $wpdb->comments, array( 'comment_ID' => $comment->comment_ID ) ) )
+	}
+
+	if ( ! $wpdb->delete( $wpdb->comments, array( 'comment_ID' => $comment->comment_ID ) ) ) {
 		return false;
+	}
 
 	/**
 	 * Fires immediately after a comment is deleted from the database.
@@ -1347,15 +1407,16 @@
 	do_action( 'deleted_comment', $comment->comment_ID, $comment );
 
 	$post_id = $comment->comment_post_ID;
-	if ( $post_id && $comment->comment_approved == 1 )
-		wp_update_comment_count($post_id);
+	if ( $post_id && $comment->comment_approved == 1 ) {
+		wp_update_comment_count( $post_id );
+	}
 
 	clean_comment_cache( $comment->comment_ID );
 
 	/** This action is documented in wp-includes/comment.php */
 	do_action( 'wp_set_comment_status', $comment->comment_ID, 'delete' );
 
-	wp_transition_comment_status('delete', $comment->comment_approved, $comment);
+	wp_transition_comment_status( 'delete', $comment->comment_approved, $comment );
 	return true;
 }
 
@@ -1369,12 +1430,14 @@
  * @param int|WP_Comment $comment_id Comment ID or WP_Comment object.
  * @return bool True on success, false on failure.
  */
-function wp_trash_comment($comment_id) {
-	if ( !EMPTY_TRASH_DAYS )
-		return wp_delete_comment($comment_id, true);
-
-	if ( !$comment = get_comment($comment_id) )
+function wp_trash_comment( $comment_id ) {
+	if ( ! EMPTY_TRASH_DAYS ) {
+		return wp_delete_comment( $comment_id, true );
+	}
+
+	if ( ! $comment = get_comment( $comment_id ) ) {
 		return false;
+	}
 
 	/**
 	 * Fires immediately before a comment is sent to the Trash.
@@ -1417,7 +1480,7 @@
  * @param int|WP_Comment $comment_id Comment ID or WP_Comment object.
  * @return bool True on success, false on failure.
  */
-function wp_untrash_comment($comment_id) {
+function wp_untrash_comment( $comment_id ) {
 	$comment = get_comment( $comment_id );
 	if ( ! $comment ) {
 		return false;
@@ -1435,8 +1498,9 @@
 	do_action( 'untrash_comment', $comment->comment_ID, $comment );
 
 	$status = (string) get_comment_meta( $comment->comment_ID, '_wp_trash_meta_status', true );
-	if ( empty($status) )
+	if ( empty( $status ) ) {
 		$status = '0';
+	}
 
 	if ( wp_set_comment_status( $comment, $status ) ) {
 		delete_comment_meta( $comment->comment_ID, '_wp_trash_meta_time' );
@@ -1529,8 +1593,9 @@
 	do_action( 'unspam_comment', $comment->comment_ID, $comment );
 
 	$status = (string) get_comment_meta( $comment->comment_ID, '_wp_trash_meta_status', true );
-	if ( empty($status) )
+	if ( empty( $status ) ) {
 		$status = '0';
+	}
 
 	if ( wp_set_comment_status( $comment, $status ) ) {
 		delete_comment_meta( $comment->comment_ID, '_wp_trash_meta_status' );
@@ -1559,25 +1624,27 @@
  * @param int|WP_Comment $comment_id Comment ID or WP_Comment object
  * @return false|string Status might be 'trash', 'approved', 'unapproved', 'spam'. False on failure.
  */
-function wp_get_comment_status($comment_id) {
-	$comment = get_comment($comment_id);
-	if ( !$comment )
+function wp_get_comment_status( $comment_id ) {
+	$comment = get_comment( $comment_id );
+	if ( ! $comment ) {
 		return false;
+	}
 
 	$approved = $comment->comment_approved;
 
-	if ( $approved == null )
+	if ( $approved == null ) {
 		return false;
-	elseif ( $approved == '1' )
+	} elseif ( $approved == '1' ) {
 		return 'approved';
-	elseif ( $approved == '0' )
+	} elseif ( $approved == '0' ) {
 		return 'unapproved';
-	elseif ( $approved == 'spam' )
+	} elseif ( $approved == 'spam' ) {
 		return 'spam';
-	elseif ( $approved == 'trash' )
+	} elseif ( $approved == 'trash' ) {
 		return 'trash';
-	else
+	} else {
 		return false;
+	}
 }
 
 /**
@@ -1598,7 +1665,7 @@
  * @param string $old_status Previous comment status.
  * @param object $comment Comment data.
  */
-function wp_transition_comment_status($new_status, $old_status, $comment) {
+function wp_transition_comment_status( $new_status, $old_status, $comment ) {
 	/*
 	 * Translate raw statuses to human readable formats for the hooks.
 	 * This is not a complete list of comment status, it's only the ones
@@ -1610,8 +1677,12 @@
 		1         => 'approved',
 		'approve' => 'approved', // wp_set_comment_status() uses "approve"
 	);
-	if ( isset($comment_statuses[$new_status]) ) $new_status = $comment_statuses[$new_status];
-	if ( isset($comment_statuses[$old_status]) ) $old_status = $comment_statuses[$old_status];
+	if ( isset( $comment_statuses[ $new_status ] ) ) {
+		$new_status = $comment_statuses[ $new_status ];
+	}
+	if ( isset( $comment_statuses[ $old_status ] ) ) {
+		$old_status = $comment_statuses[ $old_status ];
+	}
 
 	// Call the hooks
 	if ( $new_status != $old_status ) {
@@ -1690,16 +1761,19 @@
 	// Cookies should already be sanitized.
 
 	$comment_author = '';
-	if ( isset($_COOKIE['comment_author_'.COOKIEHASH]) )
-		$comment_author = $_COOKIE['comment_author_'.COOKIEHASH];
+	if ( isset( $_COOKIE[ 'comment_author_' . COOKIEHASH ] ) ) {
+		$comment_author = $_COOKIE[ 'comment_author_' . COOKIEHASH ];
+	}
 
 	$comment_author_email = '';
-	if ( isset($_COOKIE['comment_author_email_'.COOKIEHASH]) )
-		$comment_author_email = $_COOKIE['comment_author_email_'.COOKIEHASH];
+	if ( isset( $_COOKIE[ 'comment_author_email_' . COOKIEHASH ] ) ) {
+		$comment_author_email = $_COOKIE[ 'comment_author_email_' . COOKIEHASH ];
+	}
 
 	$comment_author_url = '';
-	if ( isset($_COOKIE['comment_author_url_'.COOKIEHASH]) )
-		$comment_author_url = $_COOKIE['comment_author_url_'.COOKIEHASH];
+	if ( isset( $_COOKIE[ 'comment_author_url_' . COOKIEHASH ] ) ) {
+		$comment_author_url = $_COOKIE[ 'comment_author_url_' . COOKIEHASH ];
+	}
 
 	/**
 	 * Filters the current commenter's name, email, and URL.
@@ -1714,7 +1788,36 @@
 	 *     @type string $comment_author_url   The URL address of the `$comment_author`. Default empty.
 	 * }
 	 */
-	return apply_filters( 'wp_get_current_commenter', compact('comment_author', 'comment_author_email', 'comment_author_url') );
+	return apply_filters( 'wp_get_current_commenter', compact( 'comment_author', 'comment_author_email', 'comment_author_url' ) );
+}
+
+/**
+ * Get unapproved comment author's email.
+ *
+ * Used to allow the commenter to see their pending comment.
+ *
+ * @since 5.1.0
+ *
+ * @return string The unapproved comment author's email (when supplied).
+ */
+function wp_get_unapproved_comment_author_email() {
+	$commenter_email = '';
+
+	if ( ! empty( $_GET['unapproved'] ) && ! empty( $_GET['moderation-hash'] ) ) {
+		$comment_id = (int) $_GET['unapproved'];
+		$comment    = get_comment( $comment_id );
+
+		if ( $comment && hash_equals( $_GET['moderation-hash'], wp_hash( $comment->comment_date_gmt ) ) ) {
+			$commenter_email = $comment->comment_author_email;
+		}
+	}
+
+	if ( ! $commenter_email ) {
+		$commenter       = wp_get_current_commenter();
+		$commenter_email = $commenter['comment_author_email'];
+	}
+
+	return $commenter_email;
 }
 
 /**
@@ -1756,23 +1859,23 @@
 	global $wpdb;
 	$data = wp_unslash( $commentdata );
 
-	$comment_author       = ! isset( $data['comment_author'] )       ? '' : $data['comment_author'];
+	$comment_author       = ! isset( $data['comment_author'] ) ? '' : $data['comment_author'];
 	$comment_author_email = ! isset( $data['comment_author_email'] ) ? '' : $data['comment_author_email'];
-	$comment_author_url   = ! isset( $data['comment_author_url'] )   ? '' : $data['comment_author_url'];
-	$comment_author_IP    = ! isset( $data['comment_author_IP'] )    ? '' : $data['comment_author_IP'];
-
-	$comment_date     = ! isset( $data['comment_date'] )     ? current_time( 'mysql' )            : $data['comment_date'];
+	$comment_author_url   = ! isset( $data['comment_author_url'] ) ? '' : $data['comment_author_url'];
+	$comment_author_IP    = ! isset( $data['comment_author_IP'] ) ? '' : $data['comment_author_IP'];
+
+	$comment_date     = ! isset( $data['comment_date'] ) ? current_time( 'mysql' ) : $data['comment_date'];
 	$comment_date_gmt = ! isset( $data['comment_date_gmt'] ) ? get_gmt_from_date( $comment_date ) : $data['comment_date_gmt'];
 
-	$comment_post_ID  = ! isset( $data['comment_post_ID'] )  ? 0  : $data['comment_post_ID'];
-	$comment_content  = ! isset( $data['comment_content'] )  ? '' : $data['comment_content'];
-	$comment_karma    = ! isset( $data['comment_karma'] )    ? 0  : $data['comment_karma'];
-	$comment_approved = ! isset( $data['comment_approved'] ) ? 1  : $data['comment_approved'];
-	$comment_agent    = ! isset( $data['comment_agent'] )    ? '' : $data['comment_agent'];
-	$comment_type     = ! isset( $data['comment_type'] )     ? '' : $data['comment_type'];
-	$comment_parent   = ! isset( $data['comment_parent'] )   ? 0  : $data['comment_parent'];
-
-	$user_id  = ! isset( $data['user_id'] ) ? 0 : $data['user_id'];
+	$comment_post_ID  = ! isset( $data['comment_post_ID'] ) ? 0 : $data['comment_post_ID'];
+	$comment_content  = ! isset( $data['comment_content'] ) ? '' : $data['comment_content'];
+	$comment_karma    = ! isset( $data['comment_karma'] ) ? 0 : $data['comment_karma'];
+	$comment_approved = ! isset( $data['comment_approved'] ) ? 1 : $data['comment_approved'];
+	$comment_agent    = ! isset( $data['comment_agent'] ) ? '' : $data['comment_agent'];
+	$comment_type     = ! isset( $data['comment_type'] ) ? '' : $data['comment_type'];
+	$comment_parent   = ! isset( $data['comment_parent'] ) ? 0 : $data['comment_parent'];
+
+	$user_id = ! isset( $data['user_id'] ) ? 0 : $data['user_id'];
 
 	$compacted = compact( 'comment_post_ID', 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_author_IP', 'comment_date', 'comment_date_gmt', 'comment_content', 'comment_karma', 'comment_approved', 'comment_agent', 'comment_type', 'comment_parent', 'user_id' );
 	if ( ! $wpdb->insert( $wpdb->comments, $compacted ) ) {
@@ -1825,7 +1928,7 @@
  * @param array $commentdata Contains information on the comment.
  * @return array Parsed comment information.
  */
-function wp_filter_comment($commentdata) {
+function wp_filter_comment( $commentdata ) {
 	if ( isset( $commentdata['user_ID'] ) ) {
 		/**
 		 * Filters the comment author's user id before it is set.
@@ -1873,7 +1976,7 @@
 	$commentdata['comment_author_url'] = apply_filters( 'pre_comment_author_url', $commentdata['comment_author_url'] );
 	/** This filter is documented in wp-includes/comment.php */
 	$commentdata['comment_author_email'] = apply_filters( 'pre_comment_author_email', $commentdata['comment_author_email'] );
-	$commentdata['filtered'] = true;
+	$commentdata['filtered']             = true;
 	return $commentdata;
 }
 
@@ -1887,11 +1990,13 @@
  * @param int $time_newcomment Timestamp for new comment.
  * @return bool Whether comment should be blocked.
  */
-function wp_throttle_comment_flood($block, $time_lastcomment, $time_newcomment) {
-	if ( $block ) // a plugin has already blocked... we'll let that decision stand
+function wp_throttle_comment_flood( $block, $time_lastcomment, $time_newcomment ) {
+	if ( $block ) { // a plugin has already blocked... we'll let that decision stand
 		return $block;
-	if ( ($time_newcomment - $time_lastcomment) < 15 )
+	}
+	if ( ( $time_newcomment - $time_lastcomment ) < 15 ) {
 		return true;
+	}
 	return false;
 }
 
@@ -1964,8 +2069,8 @@
 		$commentdata['user_id'] = (int) $commentdata['user_id'];
 	}
 
-	$commentdata['comment_parent'] = isset($commentdata['comment_parent']) ? absint($commentdata['comment_parent']) : 0;
-	$parent_status = ( 0 < $commentdata['comment_parent'] ) ? wp_get_comment_status($commentdata['comment_parent']) : '';
+	$commentdata['comment_parent'] = isset( $commentdata['comment_parent'] ) ? absint( $commentdata['comment_parent'] ) : 0;
+	$parent_status                 = ( 0 < $commentdata['comment_parent'] ) ? wp_get_comment_status( $commentdata['comment_parent'] ) : '';
 	$commentdata['comment_parent'] = ( 'approved' == $parent_status || 'unapproved' == $parent_status ) ? $commentdata['comment_parent'] : 0;
 
 	if ( ! isset( $commentdata['comment_author_IP'] ) ) {
@@ -1974,26 +2079,26 @@
 	$commentdata['comment_author_IP'] = preg_replace( '/[^0-9a-fA-F:., ]/', '', $commentdata['comment_author_IP'] );
 
 	if ( ! isset( $commentdata['comment_agent'] ) ) {
-		$commentdata['comment_agent'] = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT']: '';
+		$commentdata['comment_agent'] = isset( $_SERVER['HTTP_USER_AGENT'] ) ? $_SERVER['HTTP_USER_AGENT'] : '';
 	}
 	$commentdata['comment_agent'] = substr( $commentdata['comment_agent'], 0, 254 );
 
 	if ( empty( $commentdata['comment_date'] ) ) {
-		$commentdata['comment_date'] = current_time('mysql');
+		$commentdata['comment_date'] = current_time( 'mysql' );
 	}
 
 	if ( empty( $commentdata['comment_date_gmt'] ) ) {
 		$commentdata['comment_date_gmt'] = current_time( 'mysql', 1 );
 	}
 
-	$commentdata = wp_filter_comment($commentdata);
+	$commentdata = wp_filter_comment( $commentdata );
 
 	$commentdata['comment_approved'] = wp_allow_comment( $commentdata, $avoid_die );
 	if ( is_wp_error( $commentdata['comment_approved'] ) ) {
 		return $commentdata['comment_approved'];
 	}
 
-	$comment_ID = wp_insert_comment($commentdata);
+	$comment_ID = wp_insert_comment( $commentdata );
 	if ( ! $comment_ID ) {
 		$fields = array( 'comment_author', 'comment_author_email', 'comment_author_url', 'comment_content' );
 
@@ -2113,7 +2218,7 @@
  * @param bool           $wp_error       Whether to return a WP_Error object if there is a failure. Default is false.
  * @return bool|WP_Error True on success, false or WP_Error on failure.
  */
-function wp_set_comment_status($comment_id, $comment_status, $wp_error = false) {
+function wp_set_comment_status( $comment_id, $comment_status, $wp_error = false ) {
 	global $wpdb;
 
 	switch ( $comment_status ) {
@@ -2136,13 +2241,14 @@
 			return false;
 	}
 
-	$comment_old = clone get_comment($comment_id);
-
-	if ( !$wpdb->update( $wpdb->comments, array('comment_approved' => $status), array( 'comment_ID' => $comment_old->comment_ID ) ) ) {
-		if ( $wp_error )
-			return new WP_Error('db_update_error', __('Could not update comment status'), $wpdb->last_error);
-		else
+	$comment_old = clone get_comment( $comment_id );
+
+	if ( ! $wpdb->update( $wpdb->comments, array( 'comment_approved' => $status ), array( 'comment_ID' => $comment_old->comment_ID ) ) ) {
+		if ( $wp_error ) {
+			return new WP_Error( 'db_update_error', __( 'Could not update comment status' ), $wpdb->last_error );
+		} else {
 			return false;
+		}
 	}
 
 	clean_comment_cache( $comment_old->comment_ID );
@@ -2161,9 +2267,9 @@
 	 */
 	do_action( 'wp_set_comment_status', $comment->comment_ID, $comment_status );
 
-	wp_transition_comment_status($comment_status, $comment_old->comment_approved, $comment);
-
-	wp_update_comment_count($comment->comment_post_ID);
+	wp_transition_comment_status( $comment_status, $comment_old->comment_approved, $comment );
+
+	wp_update_comment_count( $comment->comment_post_ID );
 
 	return true;
 }
@@ -2181,11 +2287,11 @@
  * @param array $commentarr Contains information on the comment.
  * @return int Comment was updated if value is 1, or was not updated if value is 0.
  */
-function wp_update_comment($commentarr) {
+function wp_update_comment( $commentarr ) {
 	global $wpdb;
 
 	// First, get all of the original fields
-	$comment = get_comment($commentarr['comment_ID'], ARRAY_A);
+	$comment = get_comment( $commentarr['comment_ID'], ARRAY_A );
 	if ( empty( $comment ) ) {
 		return 0;
 	}
@@ -2196,12 +2302,12 @@
 	}
 
 	// Escape data pulled from DB.
-	$comment = wp_slash($comment);
+	$comment = wp_slash( $comment );
 
 	$old_status = $comment['comment_approved'];
 
 	// Merge old and new fields with new fields overwriting old ones.
-	$commentarr = array_merge($comment, $commentarr);
+	$commentarr = array_merge( $comment, $commentarr );
 
 	$commentarr = wp_filter_comment( $commentarr );
 
@@ -2227,7 +2333,7 @@
 		$data['comment_approved'] = 1;
 	}
 
-	$comment_ID = $data['comment_ID'];
+	$comment_ID      = $data['comment_ID'];
 	$comment_post_ID = $data['comment_post_ID'];
 
 	/**
@@ -2269,8 +2375,8 @@
 	 * @param array $data       Comment data.
 	 */
 	do_action( 'edit_comment', $comment_ID, $data );
-	$comment = get_comment($comment_ID);
-	wp_transition_comment_status($comment->comment_approved, $old_status, $comment);
+	$comment = get_comment( $comment_ID );
+	wp_transition_comment_status( $comment->comment_approved, $old_status, $comment );
 	return $rval;
 }
 
@@ -2288,14 +2394,15 @@
  * @param bool $defer
  * @return bool
  */
-function wp_defer_comment_counting($defer=null) {
+function wp_defer_comment_counting( $defer = null ) {
 	static $_defer = false;
 
-	if ( is_bool($defer) ) {
+	if ( is_bool( $defer ) ) {
 		$_defer = $defer;
 		// flush any deferred counts
-		if ( !$defer )
+		if ( ! $defer ) {
 			wp_update_comment_count( null, true );
+		}
 	}
 
 	return $_defer;
@@ -2323,7 +2430,7 @@
  * @return bool|void True on success, false on failure or if post with ID does
  *                   not exist.
  */
-function wp_update_comment_count($post_id, $do_deferred=false) {
+function wp_update_comment_count( $post_id, $do_deferred = false ) {
 	static $_deferred = array();
 
 	if ( empty( $post_id ) && ! $do_deferred ) {
@@ -2331,19 +2438,19 @@
 	}
 
 	if ( $do_deferred ) {
-		$_deferred = array_unique($_deferred);
+		$_deferred = array_unique( $_deferred );
 		foreach ( $_deferred as $i => $_post_id ) {
-			wp_update_comment_count_now($_post_id);
-			unset( $_deferred[$i] ); /** @todo Move this outside of the foreach and reset $_deferred to an array instead */
+			wp_update_comment_count_now( $_post_id );
+			unset( $_deferred[ $i ] );
+			/** @todo Move this outside of the foreach and reset $_deferred to an array instead */
 		}
 	}
 
 	if ( wp_defer_comment_counting() ) {
 		$_deferred[] = $post_id;
 		return true;
-	}
-	elseif ( $post_id ) {
-		return wp_update_comment_count_now($post_id);
+	} elseif ( $post_id ) {
+		return wp_update_comment_count_now( $post_id );
 	}
 
 }
@@ -2358,17 +2465,19 @@
  * @param int $post_id Post ID
  * @return bool True on success, false on '0' $post_id or if post with ID does not exist.
  */
-function wp_update_comment_count_now($post_id) {
+function wp_update_comment_count_now( $post_id ) {
 	global $wpdb;
 	$post_id = (int) $post_id;
-	if ( !$post_id )
+	if ( ! $post_id ) {
 		return false;
+	}
 
 	wp_cache_delete( 'comments-0', 'counts' );
 	wp_cache_delete( "comments-{$post_id}", 'counts' );
 
-	if ( !$post = get_post($post_id) )
+	if ( ! $post = get_post( $post_id ) ) {
 		return false;
+	}
 
 	$old = (int) $post->comment_count;
 
@@ -2389,7 +2498,7 @@
 		$new = (int) $new;
 	}
 
-	$wpdb->update( $wpdb->posts, array('comment_count' => $new), array('ID' => $post_id) );
+	$wpdb->update( $wpdb->posts, array( 'comment_count' => $new ), array( 'ID' => $post_id ) );
 
 	clean_post_cache( $post );
 
@@ -2403,6 +2512,10 @@
 	 * @param int $old     The old comment count.
 	 */
 	do_action( 'wp_update_comment_count', $post_id, $new, $old );
+
+	/** This action is documented in wp-includes/post.php */
+	do_action( "edit_post_{$post->post_type}", $post_id, $post );
+
 	/** This action is documented in wp-includes/post.php */
 	do_action( 'edit_post', $post_id, $post );
 
@@ -2427,53 +2540,72 @@
  * @return false|string False on failure, string containing URI on success.
  */
 function discover_pingback_server_uri( $url, $deprecated = '' ) {
-	if ( !empty( $deprecated ) )
+	if ( ! empty( $deprecated ) ) {
 		_deprecated_argument( __FUNCTION__, '2.7.0' );
+	}
 
 	$pingback_str_dquote = 'rel="pingback"';
 	$pingback_str_squote = 'rel=\'pingback\'';
 
 	/** @todo Should use Filter Extension or custom preg_match instead. */
-	$parsed_url = parse_url($url);
-
-	if ( ! isset( $parsed_url['host'] ) ) // Not a URL. This should never happen.
+	$parsed_url = parse_url( $url );
+
+	if ( ! isset( $parsed_url['host'] ) ) { // Not a URL. This should never happen.
 		return false;
+	}
 
 	//Do not search for a pingback server on our own uploads
 	$uploads_dir = wp_get_upload_dir();
-	if ( 0 === strpos($url, $uploads_dir['baseurl']) )
+	if ( 0 === strpos( $url, $uploads_dir['baseurl'] ) ) {
 		return false;
-
-	$response = wp_safe_remote_head( $url, array( 'timeout' => 2, 'httpversion' => '1.0' ) );
-
-	if ( is_wp_error( $response ) )
+	}
+
+	$response = wp_safe_remote_head(
+		$url,
+		array(
+			'timeout'     => 2,
+			'httpversion' => '1.0',
+		)
+	);
+
+	if ( is_wp_error( $response ) ) {
 		return false;
-
-	if ( wp_remote_retrieve_header( $response, 'x-pingback' ) )
+	}
+
+	if ( wp_remote_retrieve_header( $response, 'x-pingback' ) ) {
 		return wp_remote_retrieve_header( $response, 'x-pingback' );
+	}
 
 	// Not an (x)html, sgml, or xml page, no use going further.
-	if ( preg_match('#(image|audio|video|model)/#is', wp_remote_retrieve_header( $response, 'content-type' )) )
+	if ( preg_match( '#(image|audio|video|model)/#is', wp_remote_retrieve_header( $response, 'content-type' ) ) ) {
 		return false;
+	}
 
 	// Now do a GET since we're going to look in the html headers (and we're sure it's not a binary file)
-	$response = wp_safe_remote_get( $url, array( 'timeout' => 2, 'httpversion' => '1.0' ) );
-
-	if ( is_wp_error( $response ) )
+	$response = wp_safe_remote_get(
+		$url,
+		array(
+			'timeout'     => 2,
+			'httpversion' => '1.0',
+		)
+	);
+
+	if ( is_wp_error( $response ) ) {
 		return false;
+	}
 
 	$contents = wp_remote_retrieve_body( $response );
 
-	$pingback_link_offset_dquote = strpos($contents, $pingback_str_dquote);
-	$pingback_link_offset_squote = strpos($contents, $pingback_str_squote);
+	$pingback_link_offset_dquote = strpos( $contents, $pingback_str_dquote );
+	$pingback_link_offset_squote = strpos( $contents, $pingback_str_squote );
 	if ( $pingback_link_offset_dquote || $pingback_link_offset_squote ) {
-		$quote = ($pingback_link_offset_dquote) ? '"' : '\'';
-		$pingback_link_offset = ($quote=='"') ? $pingback_link_offset_dquote : $pingback_link_offset_squote;
-		$pingback_href_pos = @strpos($contents, 'href=', $pingback_link_offset);
-		$pingback_href_start = $pingback_href_pos+6;
-		$pingback_href_end = @strpos($contents, $quote, $pingback_href_start);
+		$quote                   = ( $pingback_link_offset_dquote ) ? '"' : '\'';
+		$pingback_link_offset    = ( $quote == '"' ) ? $pingback_link_offset_dquote : $pingback_link_offset_squote;
+		$pingback_href_pos       = @strpos( $contents, 'href=', $pingback_link_offset );
+		$pingback_href_start     = $pingback_href_pos + 6;
+		$pingback_href_end       = @strpos( $contents, $quote, $pingback_href_start );
 		$pingback_server_url_len = $pingback_href_end - $pingback_href_start;
-		$pingback_server_url = substr($contents, $pingback_href_start, $pingback_server_url_len);
+		$pingback_server_url     = substr( $contents, $pingback_href_start, $pingback_server_url_len );
 
 		// We may find rel="pingback" but an incomplete pingback URL
 		if ( $pingback_server_url_len > 0 ) { // We got it!
@@ -2495,22 +2627,24 @@
 	global $wpdb;
 
 	// Do pingbacks
-	while ($ping = $wpdb->get_row("SELECT ID, post_content, meta_id FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_pingme' LIMIT 1")) {
+	while ( $ping = $wpdb->get_row( "SELECT ID, post_content, meta_id FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_pingme' LIMIT 1" ) ) {
 		delete_metadata_by_mid( 'post', $ping->meta_id );
 		pingback( $ping->post_content, $ping->ID );
 	}
 
 	// Do Enclosures
-	while ($enclosure = $wpdb->get_row("SELECT ID, post_content, meta_id FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_encloseme' LIMIT 1")) {
+	while ( $enclosure = $wpdb->get_row( "SELECT ID, post_content, meta_id FROM {$wpdb->posts}, {$wpdb->postmeta} WHERE {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id AND {$wpdb->postmeta}.meta_key = '_encloseme' LIMIT 1" ) ) {
 		delete_metadata_by_mid( 'post', $enclosure->meta_id );
 		do_enclose( $enclosure->post_content, $enclosure->ID );
 	}
 
 	// Do Trackbacks
-	$trackbacks = $wpdb->get_col("SELECT ID FROM $wpdb->posts WHERE to_ping <> '' AND post_status = 'publish'");
-	if ( is_array($trackbacks) )
-		foreach ( $trackbacks as $trackback )
-			do_trackbacks($trackback);
+	$trackbacks = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE to_ping <> '' AND post_status = 'publish'" );
+	if ( is_array( $trackbacks ) ) {
+		foreach ( $trackbacks as $trackback ) {
+			do_trackbacks( $trackback );
+		}
+	}
 
 	//Do Update Services/Generic Pings
 	generic_ping();
@@ -2520,7 +2654,7 @@
  * Perform trackbacks.
  *
  * @since 1.5.0
- * @since 4.7.0 $post_id can be a WP_Post object.
+ * @since 4.7.0 `$post_id` can be a WP_Post object.
  *
  * @global wpdb $wpdb WordPress database abstraction object.
  *
@@ -2536,11 +2670,11 @@
 	$to_ping = get_to_ping( $post );
 	$pinged  = get_pung( $post );
 	if ( empty( $to_ping ) ) {
-		$wpdb->update($wpdb->posts, array( 'to_ping' => '' ), array( 'ID' => $post->ID ) );
+		$wpdb->update( $wpdb->posts, array( 'to_ping' => '' ), array( 'ID' => $post->ID ) );
 		return;
 	}
 
-	if ( empty($post->post_excerpt) ) {
+	if ( empty( $post->post_excerpt ) ) {
 		/** This filter is documented in wp-includes/post-template.php */
 		$excerpt = apply_filters( 'the_content', $post->post_content, $post->ID );
 	} else {
@@ -2548,22 +2682,28 @@
 		$excerpt = apply_filters( 'the_excerpt', $post->post_excerpt );
 	}
 
-	$excerpt = str_replace(']]>', ']]&gt;', $excerpt);
-	$excerpt = wp_html_excerpt($excerpt, 252, '&#8230;');
+	$excerpt = str_replace( ']]>', ']]&gt;', $excerpt );
+	$excerpt = wp_html_excerpt( $excerpt, 252, '&#8230;' );
 
 	/** This filter is documented in wp-includes/post-template.php */
 	$post_title = apply_filters( 'the_title', $post->post_title, $post->ID );
-	$post_title = strip_tags($post_title);
+	$post_title = strip_tags( $post_title );
 
 	if ( $to_ping ) {
 		foreach ( (array) $to_ping as $tb_ping ) {
-			$tb_ping = trim($tb_ping);
-			if ( !in_array($tb_ping, $pinged) ) {
+			$tb_ping = trim( $tb_ping );
+			if ( ! in_array( $tb_ping, $pinged ) ) {
 				trackback( $tb_ping, $post_title, $excerpt, $post->ID );
 				$pinged[] = $tb_ping;
 			} else {
-				$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, %s,
-					'')) WHERE ID = %d", $tb_ping, $post->ID ) );
+				$wpdb->query(
+					$wpdb->prepare(
+						"UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, %s,
+					'')) WHERE ID = %d",
+						$tb_ping,
+						$post->ID
+					)
+				);
 			}
 		}
 	}
@@ -2578,13 +2718,14 @@
  * @return int Same as Post ID from parameter
  */
 function generic_ping( $post_id = 0 ) {
-	$services = get_option('ping_sites');
-
-	$services = explode("\n", $services);
+	$services = get_option( 'ping_sites' );
+
+	$services = explode( "\n", $services );
 	foreach ( (array) $services as $service ) {
-		$service = trim($service);
-		if ( '' != $service )
-			weblog_ping($service);
+		$service = trim( $service );
+		if ( '' != $service ) {
+			weblog_ping( $service );
+		}
 	}
 
 	return $post_id;
@@ -2594,7 +2735,7 @@
  * Pings back the links found in a post.
  *
  * @since 0.71
- * @since 4.7.0 $post_id can be a WP_Post object.
+ * @since 4.7.0 `$post_id` can be a WP_Post object.
  *
  * @param string $content Post content to check for links. If empty will retrieve from post.
  * @param int|WP_Post $post_id Post Object or ID.
@@ -2632,12 +2773,13 @@
 
 	foreach ( (array) $post_links_temp as $link_test ) :
 		if ( ! in_array( $link_test, $pung ) && ( url_to_postid( $link_test ) != $post->ID ) // If we haven't pung it already and it isn't a link to itself
-				&& !is_local_attachment($link_test) ) : // Also, let's never ping local attachments.
-			if ( $test = @parse_url($link_test) ) {
-				if ( isset($test['query']) )
+				&& ! is_local_attachment( $link_test ) ) : // Also, let's never ping local attachments.
+			if ( $test = @parse_url( $link_test ) ) {
+				if ( isset( $test['query'] ) ) {
 					$post_links[] = $link_test;
-				elseif ( isset( $test['path'] ) && ( $test['path'] != '/' ) && ( $test['path'] != '' ) )
+				} elseif ( isset( $test['path'] ) && ( $test['path'] != '/' ) && ( $test['path'] != '' ) ) {
 					$post_links[] = $link_test;
+				}
 			}
 		endif;
 	endforeach;
@@ -2648,9 +2790,9 @@
 	 *
 	 * @since 2.0.0
 	 *
-	 * @param array $post_links An array of post links to be checked (passed by reference).
-	 * @param array $pung       Whether a link has already been pinged (passed by reference).
-	 * @param int   $post_ID    The post ID.
+	 * @param string[] $post_links Array of link URLs to be checked (passed by reference).
+	 * @param string[] $pung       Array of link URLs already pinged (passed by reference).
+	 * @param int      $post_ID    The post ID.
 	 */
 	do_action_ref_array( 'pre_ping', array( &$post_links, &$pung, $post->ID ) );
 
@@ -2663,7 +2805,7 @@
 			$pagelinkedfrom = get_permalink( $post );
 
 			// using a timeout of 3 seconds should be enough to cover slow servers
-			$client = new WP_HTTP_IXR_Client($pingback_server_url);
+			$client          = new WP_HTTP_IXR_Client( $pingback_server_url );
 			$client->timeout = 3;
 			/**
 			 * Filters the user agent sent when pinging-back a URL.
@@ -2681,8 +2823,9 @@
 			// when set to true, this outputs debug messages by itself
 			$client->debug = false;
 
-			if ( $client->query('pingback.ping', $pagelinkedfrom, $pagelinkedto) || ( isset($client->error->code) && 48 == $client->error->code ) ) // Already registered
+			if ( $client->query( 'pingback.ping', $pagelinkedfrom, $pagelinkedto ) || ( isset( $client->error->code ) && 48 == $client->error->code ) ) { // Already registered
 				add_ping( $post, $pagelinkedto );
+			}
 		}
 	}
 }
@@ -2695,11 +2838,12 @@
  * @param mixed $sites Will return if blog is public, will not return if not public.
  * @return mixed Empty string if blog is not public, returns $sites, if site is public.
  */
-function privacy_ping_filter($sites) {
-	if ( '0' != get_option('blog_public') )
+function privacy_ping_filter( $sites ) {
+	if ( '0' != get_option( 'blog_public' ) ) {
 		return $sites;
-	else
+	} else {
 		return '';
+	}
 }
 
 /**
@@ -2717,28 +2861,30 @@
  * @param int $ID Post ID.
  * @return int|false|void Database query from update.
  */
-function trackback($trackback_url, $title, $excerpt, $ID) {
+function trackback( $trackback_url, $title, $excerpt, $ID ) {
 	global $wpdb;
 
-	if ( empty($trackback_url) )
+	if ( empty( $trackback_url ) ) {
 		return;
-
-	$options = array();
+	}
+
+	$options            = array();
 	$options['timeout'] = 10;
-	$options['body'] = array(
-		'title' => $title,
-		'url' => get_permalink($ID),
-		'blog_name' => get_option('blogname'),
-		'excerpt' => $excerpt
+	$options['body']    = array(
+		'title'     => $title,
+		'url'       => get_permalink( $ID ),
+		'blog_name' => get_option( 'blogname' ),
+		'excerpt'   => $excerpt,
 	);
 
 	$response = wp_safe_remote_post( $trackback_url, $options );
 
-	if ( is_wp_error( $response ) )
+	if ( is_wp_error( $response ) ) {
 		return;
-
-	$wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET pinged = CONCAT(pinged, '\n', %s) WHERE ID = %d", $trackback_url, $ID) );
-	return $wpdb->query( $wpdb->prepare("UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, %s, '')) WHERE ID = %d", $trackback_url, $ID) );
+	}
+
+	$wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET pinged = CONCAT(pinged, '\n', %s) WHERE ID = %d", $trackback_url, $ID ) );
+	return $wpdb->query( $wpdb->prepare( "UPDATE $wpdb->posts SET to_ping = TRIM(REPLACE(to_ping, %s, '')) WHERE ID = %d", $trackback_url, $ID ) );
 }
 
 /**
@@ -2749,20 +2895,21 @@
  * @param string $server Host of blog to connect to.
  * @param string $path Path to send the ping.
  */
-function weblog_ping($server = '', $path = '') {
+function weblog_ping( $server = '', $path = '' ) {
 	include_once( ABSPATH . WPINC . '/class-IXR.php' );
 	include_once( ABSPATH . WPINC . '/class-wp-http-ixr-client.php' );
 
 	// using a timeout of 3 seconds should be enough to cover slow servers
-	$client = new WP_HTTP_IXR_Client($server, ((!strlen(trim($path)) || ('/' == $path)) ? false : $path));
-	$client->timeout = 3;
+	$client             = new WP_HTTP_IXR_Client( $server, ( ( ! strlen( trim( $path ) ) || ( '/' == $path ) ) ? false : $path ) );
+	$client->timeout    = 3;
 	$client->useragent .= ' -- WordPress/' . get_bloginfo( 'version' );
 
 	// when set to true, this outputs debug messages by itself
 	$client->debug = false;
-	$home = trailingslashit( home_url() );
-	if ( !$client->query('weblogUpdates.extendedPing', get_option('blogname'), $home, get_bloginfo('rss2_url') ) ) // then try a normal ping
-		$client->query('weblogUpdates.ping', get_option('blogname'), $home);
+	$home          = trailingslashit( home_url() );
+	if ( ! $client->query( 'weblogUpdates.extendedPing', get_option( 'blogname' ), $home, get_bloginfo( 'rss2_url' ) ) ) { // then try a normal ping
+		$client->query( 'weblogUpdates.ping', get_option( 'blogname' ), $home );
+	}
 }
 
 /**
@@ -2791,8 +2938,9 @@
  * @return IXR_Error
  */
 function xmlrpc_pingback_error( $ixr_error ) {
-	if ( $ixr_error->code === 48 )
+	if ( $ixr_error->code === 48 ) {
 		return $ixr_error;
+	}
 	return new IXR_Error( 0, '' );
 }
 
@@ -2807,7 +2955,7 @@
  *
  * @param int|array $ids Comment ID or an array of comment IDs to remove from cache.
  */
-function clean_comment_cache($ids) {
+function clean_comment_cache( $ids ) {
 	foreach ( (array) $ids as $id ) {
 		wp_cache_delete( $id, 'comment' );
 
@@ -2834,12 +2982,13 @@
  * @since 2.3.0
  * @since 4.4.0 Introduced the `$update_meta_cache` parameter.
  *
- * @param array $comments          Array of comment row objects
- * @param bool  $update_meta_cache Whether to update commentmeta cache. Default true.
+ * @param WP_Comment[] $comments          Array of comment objects
+ * @param bool         $update_meta_cache Whether to update commentmeta cache. Default true.
  */
 function update_comment_cache( $comments, $update_meta_cache = true ) {
-	foreach ( (array) $comments as $comment )
-		wp_cache_add($comment->comment_ID, $comment, 'comment');
+	foreach ( (array) $comments as $comment ) {
+		wp_cache_add( $comment->comment_ID, $comment, 'comment' );
+	}
 
 	if ( $update_meta_cache ) {
 		// Avoid `wp_list_pluck()` in case `$comments` is passed by reference.
@@ -2860,15 +3009,15 @@
  * @see update_comment_cache()
  * @global wpdb $wpdb WordPress database abstraction object.
  *
- * @param array $comment_ids       Array of comment IDs.
+ * @param int[] $comment_ids       Array of comment IDs.
  * @param bool  $update_meta_cache Optional. Whether to update the meta cache. Default true.
  */
 function _prime_comment_caches( $comment_ids, $update_meta_cache = true ) {
 	global $wpdb;
 
 	$non_cached_ids = _get_non_cached_ids( $comment_ids, 'comment' );
-	if ( !empty( $non_cached_ids ) ) {
-		$fresh_comments = $wpdb->get_results( sprintf( "SELECT $wpdb->comments.* FROM $wpdb->comments WHERE comment_ID IN (%s)", join( ",", array_map( 'intval', $non_cached_ids ) ) ) );
+	if ( ! empty( $non_cached_ids ) ) {
+		$fresh_comments = $wpdb->get_results( sprintf( "SELECT $wpdb->comments.* FROM $wpdb->comments WHERE comment_ID IN (%s)", join( ',', array_map( 'intval', $non_cached_ids ) ) ) );
 
 		update_comment_cache( $fresh_comments, $update_meta_cache );
 	}
@@ -2889,27 +3038,30 @@
  * @return array
  */
 function _close_comments_for_old_posts( $posts, $query ) {
-	if ( empty( $posts ) || ! $query->is_singular() || ! get_option( 'close_comments_for_old_posts' ) )
+	if ( empty( $posts ) || ! $query->is_singular() || ! get_option( 'close_comments_for_old_posts' ) ) {
 		return $posts;
+	}
 
 	/**
 	 * Filters the list of post types to automatically close comments for.
 	 *
 	 * @since 3.2.0
 	 *
-	 * @param array $post_types An array of registered post types. Default array with 'post'.
+	 * @param string[] $post_types An array of post type names.
 	 */
 	$post_types = apply_filters( 'close_comments_for_post_types', array( 'post' ) );
-	if ( ! in_array( $posts[0]->post_type, $post_types ) )
+	if ( ! in_array( $posts[0]->post_type, $post_types ) ) {
 		return $posts;
+	}
 
 	$days_old = (int) get_option( 'close_comments_days_old' );
-	if ( ! $days_old )
+	if ( ! $days_old ) {
 		return $posts;
+	}
 
 	if ( time() - strtotime( $posts[0]->post_date_gmt ) > ( $days_old * DAY_IN_SECONDS ) ) {
 		$posts[0]->comment_status = 'closed';
-		$posts[0]->ping_status = 'closed';
+		$posts[0]->ping_status    = 'closed';
 	}
 
 	return $posts;
@@ -2926,30 +3078,35 @@
  * @return bool $open
  */
 function _close_comments_for_old_post( $open, $post_id ) {
-	if ( ! $open )
+	if ( ! $open ) {
 		return $open;
-
-	if ( !get_option('close_comments_for_old_posts') )
+	}
+
+	if ( ! get_option( 'close_comments_for_old_posts' ) ) {
 		return $open;
-
-	$days_old = (int) get_option('close_comments_days_old');
-	if ( !$days_old )
+	}
+
+	$days_old = (int) get_option( 'close_comments_days_old' );
+	if ( ! $days_old ) {
 		return $open;
-
-	$post = get_post($post_id);
+	}
+
+	$post = get_post( $post_id );
 
 	/** This filter is documented in wp-includes/comment.php */
 	$post_types = apply_filters( 'close_comments_for_post_types', array( 'post' ) );
-	if ( ! in_array( $post->post_type, $post_types ) )
+	if ( ! in_array( $post->post_type, $post_types ) ) {
 		return $open;
+	}
 
 	// Undated drafts should not show up as comments closed.
 	if ( '0000-00-00 00:00:00' === $post->post_date_gmt ) {
 		return $open;
 	}
 
-	if ( time() - strtotime( $post->post_date_gmt ) > ( $days_old * DAY_IN_SECONDS ) )
+	if ( time() - strtotime( $post->post_date_gmt ) > ( $days_old * DAY_IN_SECONDS ) ) {
 		return false;
+	}
 
 	return $open;
 }
@@ -2977,8 +3134,8 @@
  */
 function wp_handle_comment_submission( $comment_data ) {
 
-	$comment_post_ID = $comment_parent = 0;
-	$comment_author = $comment_author_email = $comment_author_url = $comment_content = null;
+	$comment_post_ID = $comment_parent = $user_ID = 0;
+	$comment_author  = $comment_author_email = $comment_author_url = $comment_content = null;
 
 	if ( isset( $comment_data['comment_post_ID'] ) ) {
 		$comment_post_ID = (int) $comment_data['comment_post_ID'];
@@ -3061,13 +3218,12 @@
 		 * @param int $comment_post_ID Post ID.
 		 */
 		do_action( 'comment_on_draft', $comment_post_ID );
-		
+
 		if ( current_user_can( 'read_post', $comment_post_ID ) ) {
 			return new WP_Error( 'comment_on_draft', __( 'Sorry, comments are not allowed for this item.' ), 403 );
 		} else {
 			return new WP_Error( 'comment_on_draft' );
 		}
-
 	} elseif ( post_password_required( $comment_post_ID ) ) {
 
 		/**
@@ -3098,7 +3254,7 @@
 	$user = wp_get_current_user();
 	if ( $user->exists() ) {
 		if ( empty( $user->display_name ) ) {
-			$user->display_name=$user->user_login;
+			$user->display_name = $user->user_login;
 		}
 		$comment_author       = $user->display_name;
 		$comment_author_email = $user->user_email;
@@ -3110,6 +3266,8 @@
 			) {
 				kses_remove_filters(); // start with a clean slate
 				kses_init_filters(); // set up the filters
+				remove_filter( 'pre_comment_content', 'wp_filter_post_kses' );
+				add_filter( 'pre_comment_content', 'wp_filter_kses' );
 			}
 		}
 	} else {
@@ -3128,10 +3286,6 @@
 		}
 	}
 
-	if ( '' == $comment_content ) {
-		return new WP_Error( 'require_valid_comment', __( '<strong>ERROR</strong>: please type a comment.' ), 200 );
-	}
-
 	$commentdata = compact(
 		'comment_post_ID',
 		'comment_author',
@@ -3143,6 +3297,19 @@
 		'user_ID'
 	);
 
+	/**
+	 * Filters whether an empty comment should be allowed.
+	 *
+	 * @since 5.1.0
+	 *
+	 * @param bool  $allow_empty_comment Whether to allow empty comments. Default false.
+	 * @param array $commentdata         Array of comment data to be sent to wp_insert_comment().
+	 */
+	$allow_empty_comment = apply_filters( 'allow_empty_comment', false, $commentdata );
+	if ( '' === $comment_content && ! $allow_empty_comment ) {
+		return new WP_Error( 'require_valid_comment', __( '<strong>ERROR</strong>: please type a comment.' ), 200 );
+	}
+
 	$check_max_lengths = wp_check_comment_data_max_lengths( $commentdata );
 	if ( is_wp_error( $check_max_lengths ) ) {
 		return $check_max_lengths;
@@ -3387,3 +3554,12 @@
 		'done'           => $done,
 	);
 }
+
+/**
+ * Sets the last changed time for the 'comment' cache group.
+ *
+ * @since 5.0.0
+ */
+function wp_cache_set_comments_last_changed() {
+	wp_cache_set( 'last_changed', microtime(), 'comment' );
+}