diff --git src/wp-includes/meta.php src/wp-includes/meta.php
index 8833d3e..887779c 100644
--- src/wp-includes/meta.php
+++ src/wp-includes/meta.php
@@ -463,7 +463,7 @@ function get_metadata($meta_type, $object_id, $meta_key = '', $single = false) {
 		return false;
 	}
 
-	$object_id = absint( $object_id );
+	$object_id = intval( $object_id );
 	if ( ! $object_id ) {
 		return false;
 	}
@@ -476,6 +476,7 @@ function get_metadata($meta_type, $object_id, $meta_key = '', $single = false) {
 	 * will effectively short-circuit the function.
 	 *
 	 * @since 3.1.0
+	 * @since 4.7.0 The $object_id may be negative when representing placeholder objects.
 	 *
 	 * @param null|array|string $value     The value get_metadata() should return - a single metadata value,
 	 *                                     or an array of values.
@@ -491,6 +492,17 @@ function get_metadata($meta_type, $object_id, $meta_key = '', $single = false) {
 			return $check;
 	}
 
+	/*
+	 * A negative ID is used to represent a placeholder object. Since such an ID
+	 * could not exist in the DB where IDs are UNSIGNED INTEGERS then the function
+	 * must short circuit here. Meta for placeholder objects must be supplied
+	 * via the get_{$meta_type}_metadata filterl.
+	 *
+	 */
+	if ( $object_id < 0 ) {
+		return false;
+	}
+
 	$meta_cache = wp_cache_get($object_id, $meta_type . '_meta');
 
 	if ( !$meta_cache ) {
