Title: wp_get_script_polyfill
Published: December 6, 2018
Last modified: August 20, 2026

---

# wp_get_script_polyfill( WP_Scripts $scripts, string[] $tests ): string

## In this article

 * [Parameters](https://developer.wordpress.org/reference/functions/wp_get_script_polyfill/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/functions/wp_get_script_polyfill/?output_format=md#return)
 * [Source](https://developer.wordpress.org/reference/functions/wp_get_script_polyfill/?output_format=md#source)
 * [Hooks](https://developer.wordpress.org/reference/functions/wp_get_script_polyfill/?output_format=md#hooks)
 * [Related](https://developer.wordpress.org/reference/functions/wp_get_script_polyfill/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/functions/wp_get_script_polyfill/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/functions/wp_get_script_polyfill/?output_format=md#wp--skip-link--target)

Returns contents of an inline script used in appending polyfill scripts for browsers
which fail the provided tests. The provided array is a mapping from a condition 
to verify feature support to its polyfill script handle.

## 󠀁[Parameters](https://developer.wordpress.org/reference/functions/wp_get_script_polyfill/?output_format=md#parameters)󠁿

 `$scripts`[WP_Scripts](https://developer.wordpress.org/reference/classes/wp_scripts/)
required

[WP_Scripts](https://developer.wordpress.org/reference/classes/wp_scripts/) object.

`$tests`string[]required

Features to detect.

## 󠀁[Return](https://developer.wordpress.org/reference/functions/wp_get_script_polyfill/?output_format=md#return)󠁿

 string Conditional polyfill inline script.

## 󠀁[Source](https://developer.wordpress.org/reference/functions/wp_get_script_polyfill/?output_format=md#source)󠁿

    ```php
    function wp_get_script_polyfill( $scripts, $tests ) {
    	$polyfill = '';
    	foreach ( $tests as $test => $handle ) {
    		if ( ! array_key_exists( $handle, $scripts->registered ) ) {
    			continue;
    		}

    		$src = $scripts->registered[ $handle ]->src;
    		$ver = $scripts->registered[ $handle ]->ver;

    		if ( ! preg_match( '|^(https?:)?//|', $src ) && ! ( $scripts->content_url && str_starts_with( $src, $scripts->content_url ) ) ) {
    			$src = $scripts->base_url . $src;
    		}

    		if ( ! empty( $ver ) ) {
    			$src = add_query_arg( 'ver', $ver, $src );
    		}

    		/** This filter is documented in wp-includes/class-wp-scripts.php */
    		$src = esc_url( apply_filters( 'script_loader_src', $src, $handle ) );

    		if ( ! $src ) {
    			continue;
    		}

    		$polyfill .= (
    			// Test presence of feature...
    			'( ' . $test . ' ) || ' .
    			/*
    			 * ...appending polyfill on any failures. Cautious viewers may balk
    			 * at the `document.write`. Its caveat of synchronous mid-stream
    			 * blocking write is exactly the behavior we need though.
    			 */
    			'document.write( \'<script src="' .
    			$src .
    			'"></scr\' + \'ipt>\' );'
    		);
    	}

    	return $polyfill;
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/script-loader.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.1/src/wp-includes/script-loader.php#L223)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.1/src/wp-includes/script-loader.php#L223-L263)

## 󠀁[Hooks](https://developer.wordpress.org/reference/functions/wp_get_script_polyfill/?output_format=md#hooks)󠁿

 [apply_filters( ‘script_loader_src’, string $src, string $handle )](https://developer.wordpress.org/reference/hooks/script_loader_src/)

Filters the script loader source.

## 󠀁[Related](https://developer.wordpress.org/reference/functions/wp_get_script_polyfill/?output_format=md#related)󠁿

| Uses | Description | 
| [esc_url()](https://developer.wordpress.org/reference/functions/esc_url/)`wp-includes/formatting.php` |

Checks and cleans a URL.

  | 
| [add_query_arg()](https://developer.wordpress.org/reference/functions/add_query_arg/)`wp-includes/functions.php` |

Retrieves a modified URL query string.

  | 
| [apply_filters()](https://developer.wordpress.org/reference/functions/apply_filters/)`wp-includes/plugin.php` |

Calls the callback functions that have been added to a filter hook.

  |

[Show 1 more](https://developer.wordpress.org/reference/functions/wp_get_script_polyfill/?output_format=md#)
[Show less](https://developer.wordpress.org/reference/functions/wp_get_script_polyfill/?output_format=md#)

## 󠀁[Changelog](https://developer.wordpress.org/reference/functions/wp_get_script_polyfill/?output_format=md#changelog)󠁿

| Version | Description | 
| [5.0.0](https://developer.wordpress.org/reference/since/5.0.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Ffunctions%2Fwp_get_script_polyfill%2F)
before being able to contribute a note or feedback.