WordPress Version: 6.5
/**
* Finds a script module ID for the selected block metadata field. It detects
* when a path to file was provided and optionally finds a corresponding asset
* file with details necessary to register the script module under with an
* automatically generated module ID. It returns unprocessed script module
* ID otherwise.
*
* @since 6.5.0
*
* @param array $metadata Block metadata.
* @param string $field_name Field name to pick from metadata.
* @param int $index Optional. Index of the script module ID to register when multiple
* items passed. Default 0.
* @return string|false Script module ID or false on failure.
*/
function register_block_script_module_id($metadata, $field_name, $index = 0)
{
if (empty($metadata[$field_name])) {
return false;
}
$module_id = $metadata[$field_name];
if (is_array($module_id)) {
if (empty($module_id[$index])) {
return false;
}
$module_id = $module_id[$index];
}
$module_path = remove_block_asset_path_prefix($module_id);
if ($module_id === $module_path) {
return $module_id;
}
$path = dirname($metadata['file']);
$module_asset_raw_path = $path . '/' . substr_replace($module_path, '.asset.php', -strlen('.js'));
$module_id = generate_block_asset_handle($metadata['name'], $field_name, $index);
$module_asset_path = wp_normalize_path(realpath($module_asset_raw_path));
$module_path_norm = wp_normalize_path(realpath($path . '/' . $module_path));
$module_uri = get_block_asset_url($module_path_norm);
$module_asset = (!empty($module_asset_path)) ? require $module_asset_path : array();
$module_dependencies = isset($module_asset['dependencies']) ? $module_asset['dependencies'] : array();
$block_version = isset($metadata['version']) ? $metadata['version'] : false;
$module_version = isset($module_asset['version']) ? $module_asset['version'] : $block_version;
wp_register_script_module($module_id, $module_uri, $module_dependencies, $module_version);
return $module_id;
}