WP_Scripts::filter_eligible_strategies( string $handle, string[]|null $eligible_strategies = null,  $checked = array() ): string[]

In this article

This function’s access is marked private. This means it is not intended for use by plugin or theme developers, only in other core functions. It is listed here for completeness.

Filter the list of eligible loading strategies for a script.

Parameters

$handlestringrequired
The script handle.
$eligible_strategiesstring[]|nulloptional
The list of strategies to filter.

Default:null

true> $checked Optional. An array of already checked script handles, used to avoid recursive loops.

Return

string[] A list of eligible loading strategies that could be used.

Source

private function filter_eligible_strategies( $handle, $eligible_strategies = null, $checked = array() ) {
	// If no strategies are being passed, all strategies are eligible.
	if ( null === $eligible_strategies ) {
		$eligible_strategies = $this->delayed_strategies;
	}

	// If this handle was already checked, return early.
	if ( isset( $checked[ $handle ] ) ) {
		return $eligible_strategies;
	}

	// Mark this handle as checked.
	$checked[ $handle ] = true;

	// If this handle isn't registered, don't filter anything and return.
	if ( ! isset( $this->registered[ $handle ] ) ) {
		return $eligible_strategies;
	}

	// If the handle is not enqueued, don't filter anything and return.
	if ( ! $this->query( $handle, 'enqueued' ) ) {
		return $eligible_strategies;
	}

	$is_alias          = (bool) ! $this->registered[ $handle ]->src;
	$intended_strategy = $this->get_data( $handle, 'strategy' );

	// For non-alias handles, an empty intended strategy filters all strategies.
	if ( ! $is_alias && empty( $intended_strategy ) ) {
		return array();
	}

	// Handles with inline scripts attached in the 'after' position cannot be delayed.
	if ( $this->has_inline_script( $handle, 'after' ) ) {
		return array();
	}

	// If the intended strategy is 'defer', filter out 'async'.
	if ( 'defer' === $intended_strategy ) {
		$eligible_strategies = array( 'defer' );
	}

	$dependents = $this->get_dependents( $handle );

	// Recursively filter eligible strategies for dependents.
	foreach ( $dependents as $dependent ) {
		// Bail early once we know the eligible strategy is blocking.
		if ( empty( $eligible_strategies ) ) {
			return array();
		}

		$eligible_strategies = $this->filter_eligible_strategies( $dependent, $eligible_strategies, $checked );
	}

	return $eligible_strategies;
}

Changelog

VersionDescription
6.3.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.