'MY_GLOBAL', * data => [] * } * } */ function enqueue_assets($directory, $opts = []) { $defaults = [ 'base_url' => '', 'handle' => basename($directory), 'scripts' => [], 'styles' => [], 'localize' => [ 'name' => 'MY_GLOBAL', 'data' => [] ], 'textDomain' => '' ]; // var_dump($opts); $opts = wp_parse_args($opts, $defaults); $assets = get_assets_list($directory); $base_url = $opts['base_url']; if (empty($base_url)) { $base_url = infer_base_url($directory); } if (empty($assets)) { // TODO: This should be an error condition. return; } // There will be at most one JS and one CSS file in vanilla Create React App manifests. $has_css = false; foreach ($assets as $asset_path) { $is_js = preg_match('/\.js$/', $asset_path); $is_css = preg_match('/\.css$/', $asset_path); if (!$is_js && !$is_css) { // Assets such as source maps and images are also listed; ignore these. continue; } if ($is_js) { $res = wp_enqueue_script( $opts['handle'], get_asset_uri($asset_path, $base_url), [], NULL, true ); wp_localize_script( $opts['handle'], $opts['localize']['name'], $opts['localize']['data'] ); } elseif ($is_css) { $has_css = true; wp_enqueue_style( $opts['handle'], get_asset_uri($asset_path, $base_url), $opts['styles'] ); } } // Ensure CSS dependencies are always loaded, even when using CSS-in-JS in // development. if (!$has_css) { wp_register_style( $opts['handle'], null, $opts['styles'] ); wp_enqueue_style($opts['handle']); } }