Created
March 4, 2021 11:07
-
-
Save stevygee/458196f91c595ba1b69e394d55426bc2 to your computer and use it in GitHub Desktop.
List all enqueued scripts and styles on the current page. This won't work as an REST API endpoint, unfortunately. If that's your goal, use Frontity's head tags plugin and disable filtering of scripts and styles.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
global $enqueued_scripts; | |
global $enqueued_styles; | |
function sg_format_asset_url( $src, $ver ) { | |
// Fallback to WP version, if not set | |
$ver = $ver ? $ver : get_bloginfo( 'version', 'display' ); | |
// Append site root URL, if missing | |
$url = strpos( $src, get_home_url() ) !== false ? $src : get_home_url() . $src; | |
// Cache busting | |
$url .= '?ver=' . $ver; | |
return $url; | |
} | |
function sg_walk_dependencies( $asset, $is_script ) { | |
global $wp_scripts; | |
global $wp_styles; | |
$urls = array(); | |
if( $asset->deps ) { | |
foreach( $asset->deps as $handle ) { | |
// Get object for this dependency | |
$dep = $is_script ? $wp_scripts->registered[$handle] : $wp_styles->registered[$handle]; | |
if( $dep->deps ) { | |
// This dependency has more dependencies! Do a recursion | |
$urls[] = sg_walk_dependencies( $dep, $is_script ); | |
} elseif( false !== $dep->src ) { | |
// Store URL of dependency | |
$urls[] = sg_format_asset_url( $dep->src, $dep->ver ); | |
} | |
} | |
} | |
// Store asset after its dependencies | |
if( false !== $asset->src ) { | |
// Add inline scripts/styles | |
if ( $asset->extra ) { | |
$inline_script = array_key_exists( 'data', $asset->extra ) ? $asset->extra['data'] : ''; | |
$inline_script = array_key_exists( 'after', $asset->extra ) ? implode( '', $asset->extra['after'] ) : ''; | |
$inline_script = trim( $inline_script ); | |
if ( $inline_script ) { | |
if ( $is_script ) { | |
$urls[] = '<script type="text/javascript" id="' . $asset->handle . '-js-after"> | |
' . $inline_script . ' | |
</script>'; | |
} else { | |
$urls[] = '<style type="text/css" id="' . $asset->handle . '-inline-css"> | |
' . $inline_script . ' | |
</style>'; | |
} | |
} | |
} | |
// Store URL | |
if ( $asset->src ) { | |
$urls[] = sg_format_asset_url( $asset->src, $asset->ver ); | |
} | |
} | |
return $urls; | |
} | |
function sg_format_dependencies( $enqueued_assets ) { | |
// Flatten the array: | |
// 1. Recursively iterate the array iterator | |
$output_array_obj = new RecursiveIteratorIterator( | |
new RecursiveArrayIterator( $enqueued_assets ) ); | |
// 2. Copy the iterator into an array | |
$enqueued_assets = iterator_to_array( $output_array_obj, false ); | |
// Clean up duplicate assets | |
$enqueued_assets = array_unique( $enqueued_assets ); | |
return $enqueued_assets; | |
} | |
function sg_list_scripts() { | |
global $wp_scripts; | |
global $enqueued_scripts; | |
$enqueued_scripts = array(); | |
foreach( $wp_scripts->queue as $handle ) { | |
$enqueued_scripts[] = sg_walk_dependencies( $wp_scripts->registered[$handle], true ); | |
//$enqueued_scripts[] = print_r( $wp_scripts->registered[$handle], true); | |
} | |
$enqueued_scripts = sg_format_dependencies( $enqueued_scripts ); | |
} | |
add_action( 'wp_print_scripts', 'sg_list_scripts' ); | |
function sg_list_styles() { | |
global $wp_styles; | |
global $enqueued_styles; | |
$enqueued_styles = array(); | |
foreach( $wp_styles->queue as $handle ) { | |
$enqueued_styles[] = sg_walk_dependencies( $wp_styles->registered[$handle], false ); | |
//$enqueued_styles[] = print_r( $wp_styles->registered[$handle], true); | |
} | |
$enqueued_styles = sg_format_dependencies( $enqueued_styles ); | |
} | |
add_action( 'wp_print_styles', 'sg_list_styles' ); | |
add_action( 'wp_head', function() { | |
global $enqueued_scripts; | |
echo '<pre>'; | |
echo esc_html( print_r( $enqueued_scripts, true ) ); | |
echo '</pre>'; | |
global $enqueued_styles; | |
echo '<pre>'; | |
echo esc_html( print_r( $enqueued_styles, true ) ); | |
echo '</pre>'; | |
} ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment