WP_Dependencies::all_deps()publicWP 2.1.0

Determines dependencies.

Recursively builds an array of items to process taking dependencies into account. Does NOT catch infinite loops.

Method of the class: WP_Dependencies{}

No Hooks.

Return

true|false. True on success, false on failure.

Usage

$WP_Dependencies = new WP_Dependencies();
$WP_Dependencies->all_deps( $handles, $recursion, $group );
$handles(string|string[]) (required)
Item handle (string) or item handles (array of strings).
$recursion(true|false)
Internal flag that function is calling itself.
Default: false
$group(int|false)
Group level: level (int), no group (false).
Default: false

Changelog

Since 2.1.0 Introduced.
Since 2.6.0 Moved from WP_Scripts.
Since 2.8.0 Added the $group parameter.

WP_Dependencies::all_deps() code WP 6.5.2

public function all_deps( $handles, $recursion = false, $group = false ) {
	$handles = (array) $handles;
	if ( ! $handles ) {
		return false;
	}

	foreach ( $handles as $handle ) {
		$handle_parts = explode( '?', $handle );
		$handle       = $handle_parts[0];
		$queued       = in_array( $handle, $this->to_do, true );

		if ( in_array( $handle, $this->done, true ) ) { // Already done.
			continue;
		}

		$moved     = $this->set_group( $handle, $recursion, $group );
		$new_group = $this->groups[ $handle ];

		if ( $queued && ! $moved ) { // Already queued and in the right group.
			continue;
		}

		$keep_going = true;
		if ( ! isset( $this->registered[ $handle ] ) ) {
			$keep_going = false; // Item doesn't exist.
		} elseif ( $this->registered[ $handle ]->deps && array_diff( $this->registered[ $handle ]->deps, array_keys( $this->registered ) ) ) {
			$keep_going = false; // Item requires dependencies that don't exist.
		} elseif ( $this->registered[ $handle ]->deps && ! $this->all_deps( $this->registered[ $handle ]->deps, true, $new_group ) ) {
			$keep_going = false; // Item requires dependencies that don't exist.
		}

		if ( ! $keep_going ) { // Either item or its dependencies don't exist.
			if ( $recursion ) {
				return false; // Abort this branch.
			} else {
				continue; // We're at the top level. Move on to the next one.
			}
		}

		if ( $queued ) { // Already grabbed it and its dependencies.
			continue;
		}

		if ( isset( $handle_parts[1] ) ) {
			$this->args[ $handle ] = $handle_parts[1];
		}

		$this->to_do[] = $handle;
	}

	return true;
}