register_block_script_handle() – Finds a script handle for the selected block metadata field. It detects when a path to file was provided and finds a corresponding asset file with details necessary to register the script under automatically generated handle name. It returns unprocessed script handle otherwise.

You appear to be a bot. Output may be restricted

Description

Finds a script handle for the selected block metadata field. It detects when a path to file was provided and finds a corresponding asset file with details necessary to register the script under automatically generated handle name. It returns unprocessed script handle otherwise.

Usage

$string|false = register_block_script_handle( $metadata, $field_name );

Parameters

$metadata
( array ) required – Block metadata.
$field_name
( string ) required – Field name to pick from metadata.

Returns

string|false Script handle provided directly or created through script's registration, or false on failure.

Source

File name: wordpress/wp-includes/blocks.php
Lines:

1 to 62 of 62
function register_block_script_handle( $metadata, $field_name ) {
  if ( empty( $metadata[ $field_name ] ) ) {
    return false;
  }
  $script_handle = $metadata[ $field_name ];
  $script_path   = remove_block_asset_path_prefix( $metadata[ $field_name ] );
  if ( $script_handle === $script_path ) {
    return $script_handle;
  }

  $script_handle     = generate_block_asset_handle( $metadata['name'], $field_name );
  $script_asset_path = wp_normalize_path(
    realpath(
      dirname( $metadata['file'] ) . '/' .
      substr_replace( $script_path, '.asset.php', - strlen( '.js' ) )
    )
  );
  if ( ! file_exists( $script_asset_path ) ) {
    _doing_it_wrong(
      __FUNCTION__,
      sprintf(
        /* translators: 1: Field name, 2: Block name. */
        __( 'The asset file for the "%1$s" defined in "%2$s" block definition is missing.' ),
        $field_name,
        $metadata['name']
      ),
      '5.5.0'
    );
    return false;
  }
  // Path needs to be normalized to work in Windows env.
  $wpinc_path_norm  = wp_normalize_path( realpath( ABSPATH . WPINC ) );
  $theme_path_norm  = wp_normalize_path( get_theme_file_path() );
  $script_path_norm = wp_normalize_path( realpath( dirname( $metadata['file'] ) . '/' . $script_path ) );
  $is_core_block    = isset( $metadata['file'] ) && 0 === strpos( $metadata['file'], $wpinc_path_norm );
  $is_theme_block   = 0 === strpos( $script_path_norm, $theme_path_norm );

  $script_uri = plugins_url( $script_path, $metadata['file'] );
  if ( $is_core_block ) {
    $script_uri = includes_url( str_replace( $wpinc_path_norm, '', $script_path_norm ) );
  } elseif ( $is_theme_block ) {
    $script_uri = get_theme_file_uri( str_replace( $theme_path_norm, '', $script_path_norm ) );
  }

  $script_asset        = require $script_asset_path;
  $script_dependencies = isset( $script_asset['dependencies'] ) ? $script_asset['dependencies'] : array();
  $result              = wp_register_script(
    $script_handle,
    $script_uri,
    $script_dependencies,
    isset( $script_asset['version'] ) ? $script_asset['version'] : false
  );
  if ( ! $result ) {
    return false;
  }

  if ( ! empty( $metadata['textdomain'] ) && in_array( 'wp-i18n', $script_dependencies, true ) ) {
    wp_set_script_translations( $script_handle, $metadata['textdomain'] );
  }

  return $script_handle;
}
 

 View on GitHub View on Trac