Index: meta.php
===================================================================
--- meta.php	(revision 15559)
+++ meta.php	(working copy)
@@ -45,6 +45,10 @@
 	// expected_slashed ($meta_key)
 	$meta_key = stripslashes($meta_key);
 
+	$check = apply_filters( "add_{$meta_type}_metadata" , false, $object_id, $meta_key, $meta_value, $unique );
+	if ( false !== $check )
+		return true;
+
 	if ( $unique && $wpdb->get_var( $wpdb->prepare(
 		"SELECT COUNT(*) FROM $table WHERE meta_key = %s AND $column = %d",
 		$meta_key, $object_id ) ) )
@@ -106,6 +110,10 @@
 	// expected_slashed ($meta_key)
 	$meta_key = stripslashes($meta_key);
 
+	$check = apply_filters( "update_{$meta_type}_metadata" , false, $object_id, $meta_key, $meta_value, $prev_value );
+	if ( false !== $check )
+		return true;
+
 	if ( ! $meta_id = $wpdb->get_var( $wpdb->prepare( "SELECT $id_column FROM $table WHERE meta_key = %s AND $column = %d", $meta_key, $object_id ) ) )
 		return add_metadata($meta_type, $object_id, $meta_key, $meta_value);
 
@@ -178,6 +186,10 @@
 	$meta_key = stripslashes($meta_key);
 	$meta_value = maybe_serialize( stripslashes_deep($meta_value) );
 
+	$check = apply_filters( "delete_{$meta_type}_metadata" , false, $object_id, $meta_key, $meta_value, $delete_all );
+	if ( false !== $check )
+		return true;
+
 	$query = $wpdb->prepare( "SELECT $id_column FROM $table WHERE meta_key = %s", $meta_key );
 
 	if ( !$delete_all )
@@ -227,6 +239,16 @@
 	if ( !$object_id = absint($object_id) )
 		return false;
 
+	$check = apply_filters( "get_{$meta_type}_metadata" , false, $object_id, $meta_key, $single );
+	if ( false !== $check ) {
+		if ( !is_array( $check ) )
+			return $check;
+		elseif ( $single )
+			return maybe_unserialize( $check[0] );
+		else
+			return array_map('maybe_unserialize', $check);
+	}
+
 	$meta_cache = wp_cache_get($object_id, $meta_type . '_meta');
 
 	if ( !$meta_cache ) {
