diff --git a/wp-includes/feed.php b/wp-includes/feed.php index 54f7bcdf52..c0b75016e3 100644 --- a/wp-includes/feed.php +++ b/wp-includes/feed.php @@ -648,55 +648,59 @@ function self_link() { } /** - * Get the timestamp of the most recently modified post from WP_Query. + * Get the UTC time of the most recently modified post from WP_Query. * - * If viewing a comment feed, the timestamp of the most recently modified + * If viewing a comment feed, the time of the most recently modified * comment will be returned. * * @global WP_Query $wp_query WordPress Query object. * * @since 5.2.0 * - * @param string $format Format of the timestamp to return, passed to mysql2date. - * - * @return string The timestamp. + * @param string $format Date format string to return the time in. + * @return string|false The time in requested format, or false on failure. */ function get_feed_build_date( $format ) { global $wp_query; - if ( empty( $wp_query ) || ! $wp_query->have_posts() ) { - // Fallback to last time any post was modified or published. - return get_lastpostmodified( 'GMT' ); + $datetime = false; + $max_modified_time = false; + $utc = new DateTimeZone( 'UTC' ); + + if ( ! empty( $wp_query ) && $wp_query->have_posts() ) { + // Extract the post modified times from the posts. + $modified_times = wp_list_pluck( $wp_query->posts, 'post_modified_gmt' ); + + // If this is a comment feed, check those objects too. + if ( $wp_query->is_comment_feed() && $wp_query->comment_count ) { + // Extract the comment modified times from the comments. + $comment_times = wp_list_pluck( $wp_query->comments, 'comment_date_gmt' ); + + // Add the comment times to the post times for comparison. + $modified_times = array_merge( $modified_times, $comment_times ); + } + + // Determine the maximum modified time. + $datetime = date_create_immutable_from_format( 'Y-m-d H:i:s', max( $modified_times ), $utc ); } - // Extract the post modified times from the posts. - $modified_times = wp_list_pluck( $wp_query->posts, 'post_modified_gmt' ); - - // If this is a comment feed, check those objects too. - if ( $wp_query->is_comment_feed() && $wp_query->comment_count ) { - // Extract the comment modified times from the comments. - $comment_times = wp_list_pluck( $wp_query->comments, 'comment_date_gmt' ); - - // Add the comment times to the post times for comparison. - $modified_times = array_merge( $modified_times, $comment_times ); + if ( false === $datetime ) { + // Fall back to last time any post was modified or published. + $datetime = date_create_immutable_from_format( 'Y-m-d H:i:s', get_lastpostmodified( 'GMT' ), $utc ); } - // Determine the maximum modified time. - $datetime = date_create_immutable_from_format( - 'Y-m-d H:i:s', - max( $modified_times ), - new DateTimeZone( 'UTC' ) - ); - - $max_modified_time = $datetime->format( $format ); + if ( false !== $datetime ) { + $max_modified_time = $datetime->format( $format ); + } /** * Filters the date the last post or comment in the query was modified. * * @since 5.2.0 * - * @param string $max_modified_time Date the last post or comment was modified in the query. - * @param string $format The date format requested in get_feed_build_date. + * @param string|false $max_modified_time Date the last post or comment was modified in the query, in UTC. + * False on failure. + * @param string $format The date format requested in get_feed_build_date(). */ return apply_filters( 'get_feed_build_date', $max_modified_time, $format ); } diff --git a/wp-includes/version.php b/wp-includes/version.php index 2b2735bdc4..aa81525396 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -13,7 +13,7 @@ * * @global string $wp_version */ -$wp_version = '5.4-alpha-46973'; +$wp_version = '5.4-alpha-46974'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.