wpseek.com
A WordPress-centric search engine for devs and theme authors



_wp_add_entity_action_modules_to_editor_script › WordPress Function

Since7.2.0
Deprecatedn/a
› _wp_add_entity_action_modules_to_editor_script ( $scripts = null )
Parameters:
  • (WP_Scripts|null) $scripts The scripts registry. Defaults to the global one.
    Required: No
    Default: null
Defined at:
Codex:

Declares the script modules of the entity actions as dependencies of the editor script.

The editor imports the script modules of an entity on demand, with a dynamic import() the browser resolves through the import map of the page. Listing the modules as dynamic module_dependencies of the wp-editor script adds them to the import map of every page that loads the editor script: the post editor, the site editor, and the pages booted by @wordpress/boot, whose prerequisites depend on it. A dynamic dependency is only listed in the import map; the module is fetched when it is imported. Reading the registry fires wp_entity_actions_api_init, so the actions and their script modules are registered on demand. It only reads the registry on the pages that load the editor script, not on every admin request (heartbeat, Ajax, other screens). It runs on admin_footer, the last action before the import map is printed that fires both in the admin template and in the pages rendered outside it, which print the import map themselves. By then init has completed, so the post types and supports the actions derive from are final. The registry only accepts registrations while the action fires, so the modules declared here are the modules of every action the page can show. The admin_footer action passes it no argument, so the global registry is used. In other scenarios (tests), the scripts are given directly.


Source

function _wp_add_entity_action_modules_to_editor_script( $scripts = null ) {
	if ( ! $scripts instanceof WP_Scripts ) {
		$scripts = wp_scripts();
	}

	// The actions are loaded by `usePostActions()` of the editor script, so
	// every screen showing them loads it.
	if ( ! $scripts->query( 'wp-editor', 'enqueued' ) && ! $scripts->query( 'wp-editor', 'done' ) ) {
		return;
	}

	$kinds = wp_get_all_registered_entity_action_modules();
	if ( empty( $kinds ) ) {
		return;
	}

	$dependencies = $scripts->get_data( 'wp-editor', 'module_dependencies' );
	$dependencies = is_array( $dependencies ) ? $dependencies : array();

	$declared = array();
	foreach ( $dependencies as $dependency ) {
		$declared[] = is_array( $dependency ) ? $dependency['id'] : $dependency;
	}

	$added = false;
	foreach ( $kinds as $entities ) {
		foreach ( $entities as $modules ) {
			foreach ( $modules as $module ) {
				if ( ! in_array( $module, $declared, true ) ) {
					$dependencies[] = array(
						'id'     => $module,
						'import' => 'dynamic',
					);
					$declared[]     = $module;
					$added          = true;
				}
			}
		}
	}

	if ( $added ) {
		// `add_data()` replaces the value, hence the merge above.
		$scripts->add_data( 'wp-editor', 'module_dependencies', $dependencies );
	}
}