Index: src/wp-includes/option.php
===================================================================
--- src/wp-includes/option.php	(revision 34724)
+++ src/wp-includes/option.php	(working copy)
@@ -695,6 +695,19 @@
 	 */
 	$value = apply_filters( 'pre_set_transient_' . $transient, $value, $expiration, $transient );
 
+	/**
+	 * Filter the expiration for a transient before its value is set.
+	 *
+	 * The dynamic portion of the hook name, `$transient`, refers to the transient name.
+	 *
+	 * @since 4.4.0
+	 *
+	 * @param mixed  $value      New value of transient.
+	 * @param int    $expiration Time until expiration in seconds.
+	 * @param string $transient  Transient name.
+	 */
+	$expiration = apply_filters( 'expiration_pre_set_transient_' . $transient, $expiration, $value, $transient );
+
 	if ( wp_using_ext_object_cache() ) {
 		$result = wp_cache_set( $transient, $value, 'transient', $expiration );
 	} else {
@@ -1481,6 +1494,19 @@
 
 	$expiration = (int) $expiration;
 
+	/**
+	 * Filter the expiration for a transient before its value is set.
+	 *
+	 * The dynamic portion of the hook name, `$transient`, refers to the transient name.
+	 *
+	 * @since 4.4.0
+	 *
+	 * @param mixed  $value      New value of transient.
+	 * @param int    $expiration Time until expiration in seconds.
+	 * @param string $transient  Transient name.
+	 */
+	$expiration = apply_filters( 'expiration_pre_set_transient_' . $transient, $expiration, $value, $transient );	
+
 	if ( wp_using_ext_object_cache() ) {
 		$result = wp_cache_set( $transient, $value, 'site-transient', $expiration );
 	} else {
