diff --git src/wp-includes/default-filters.php src/wp-includes/default-filters.php
index 3402e48..bc690d3 100644
--- src/wp-includes/default-filters.php
+++ src/wp-includes/default-filters.php
@@ -144,7 +144,7 @@ add_filter( 'the_excerpt',     'convert_smilies'  );
 add_filter( 'the_excerpt',     'convert_chars'    );
 add_filter( 'the_excerpt',     'wpautop'          );
 add_filter( 'the_excerpt',     'shortcode_unautop');
-add_filter( 'get_the_excerpt', 'wp_trim_excerpt'  );
+add_filter( 'get_the_excerpt', 'wp_trim_excerpt', 10, 2 );
 
 add_filter( 'the_post_thumbnail_caption', 'wptexturize'     );
 add_filter( 'the_post_thumbnail_caption', 'convert_smilies' );
diff --git src/wp-includes/formatting.php src/wp-includes/formatting.php
index 8318199..a8da79a 100644
--- src/wp-includes/formatting.php
+++ src/wp-includes/formatting.php
@@ -3261,12 +3261,13 @@ function human_time_diff( $from, $to = '' ) {
  * @since 1.5.0
  *
  * @param string $text Optional. The excerpt. If set to empty, an excerpt is generated.
+ * @param WP_Post $post Optional. A specific post to trim the excerpt of. Otherwise the global post is used.
  * @return string The excerpt.
  */
-function wp_trim_excerpt( $text = '' ) {
+function wp_trim_excerpt( $text = '', $post = null ) {
 	$raw_excerpt = $text;
 	if ( '' == $text ) {
-		$text = get_the_content('');
+		$text = get_the_content( '', false, $post );
 
 		$text = strip_shortcodes( $text );
 
diff --git src/wp-includes/post-template.php src/wp-includes/post-template.php
index be15252..ea57573 100644
--- src/wp-includes/post-template.php
+++ src/wp-includes/post-template.php
@@ -255,12 +255,17 @@ function the_content( $more_link_text = null, $strip_teaser = false) {
  *
  * @param string $more_link_text Optional. Content for when there is more text.
  * @param bool   $strip_teaser   Optional. Strip teaser content before the more text. Default is false.
+ * @param WP_Post $post          Optional. A specific post to trim the content of. Otherwise the global post is used.
  * @return string
  */
-function get_the_content( $more_link_text = null, $strip_teaser = false ) {
+function get_the_content( $more_link_text = null, $strip_teaser = false, $post = null ) {
 	global $page, $more, $preview, $pages, $multipage;
 
-	$post = get_post();
+	if ( $post ) {
+		$content = $post->post_content;
+	}
+
+	$post = get_post( $post );
 
 	if ( null === $more_link_text ) {
 		$more_link_text = sprintf(
@@ -284,7 +289,11 @@ function get_the_content( $more_link_text = null, $strip_teaser = false ) {
 	if ( $page > count( $pages ) ) // if the requested page doesn't exist
 		$page = count( $pages ); // give them the highest numbered page that DOES exist
 
-	$content = $pages[$page - 1];
+	// Use the global post if a specific one wasn't passed
+	if ( empty( $content ) ) {
+		$content = $pages[ $page - 1 ];
+	}
+
 	if ( preg_match( '/<!--more(.*?)?-->/', $content, $matches ) ) {
 		$content = explode( $matches[0], $content, 2 );
 		if ( ! empty( $matches[1] ) && ! empty( $more_link_text ) )
