'; } return $tag; }, 10, 3 ); add_filter( 'script_loader_src', function( $src, $handle ) { if ( str_contains( $handle, 'module/brandy-frontend/vite' ) && strpos( $src, '?ver=' ) ) { return remove_query_arg( 'ver', $src ); } return $src; }, 10, 2 ); } /** * Enqueue script * * @param string $script Name of script file. * @param string $port Current when run dev. */ public static function enqueue_preload( $script, $port ) { add_action( 'admin_head', function() use ( $script, $port ) { self::js_preload_imports( $script, $port ); } ); } /** * Register script * * @param string $entry Name of script file. * @param string $port Current when run dev. */ public static function register( $entry, $port ) { $url = constant( 'BRANDY_IS_DEVELOPMENT' ) ? "http://localhost:$port/src/$entry" : self::asset_url( $entry ); if ( ! $url ) { return ''; } if ( constant( 'BRANDY_IS_DEVELOPMENT' ) ) { wp_enqueue_script( 'module/brandy-frontend/vite', "http://localhost:$port/@vite/client", array( 'react', 'react-dom', 'jquery' ), 1.0, false ); } wp_register_script( "module/brandy-frontend/$entry", $url, array( 'react', 'react-dom', 'jquery' ), true, true ); wp_enqueue_script( "module/brandy-frontend/$entry" ); } /** * Register script * * @param string $entry Name of script file. * @param string $port Current when run dev. */ private static function js_preload_imports( $entry, $port ) { if ( constant( 'BRANDY_IS_DEVELOPMENT' ) ) { echo ''; } else { foreach ( self::imports_urls( $entry ) as $url ) { echo ( '' ); } } } /** * Register script * * @param string $entry Name of css file. */ private static function css_tag( $entry ) { // not needed on dev, it's inject by Vite. if ( constant( 'BRANDY_IS_DEVELOPMENT' ) ) { return ''; } $tags = ''; foreach ( self::css_urls( $entry ) as $key => $url ) { wp_register_style( "brandy-frontend/$key", $url, array(), BRANDY_SCRIPT_VERSION ); wp_enqueue_style( "brandy-frontend/$key", $url, array(), BRANDY_SCRIPT_VERSION ); } return $tags; } /** * Get manifest file */ private static function get_manifest() { // phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents $content = file_get_contents( BRANDY_TEMPLATE_DIR . self::$path_to_dist . 'manifest.json' ); return json_decode( $content, true ); } /** * Get asset url * * @param string $entry name of asset file. */ private static function asset_url( $entry ) { $manifest = self::get_manifest(); $root = self::$root; $key = "$root/$entry"; return isset( $manifest[ $key ] ) ? self::base_path() . $manifest[ $key ]['file'] : self::base_path() . $entry; } /** * Get asset file url */ private static function get_public_url_base() { return constant( 'BRANDY_IS_DEVELOPMENT' ) ? '/dist/' : self::base_path(); } /** * Import asset files from url * * @param string $entry Entry file. */ private static function imports_urls( $entry ) { $urls = array(); $manifest = self::get_manifest(); $root = self::$root; $key = "$root/$entry"; if ( ! empty( $manifest[ $key ]['imports'] ) ) { foreach ( $manifest[ $key ]['imports'] as $imports ) { $urls[] = self::get_public_url_base() . $manifest[ $imports ]['file']; } } return $urls; } /** * Get urls of css files * * @param string $entry Entry file. */ private static function css_urls( $entry ) { $urls = array(); $manifest = self::get_manifest(); foreach ( $manifest as $key => $value ) { if ( strpos( $key, 'css' ) === false ) { continue; } if ( strpos( $key, 'wc' ) !== false && ! is_wc_installed() ) { continue; } if ( is_wc_installed() && strpos( $key, 'my-account' ) !== false && ! \is_account_page() ) { continue; } if ( is_wc_installed() && strpos( $key, 'checkout' ) !== false && ! \is_checkout() ) { continue; } if ( is_wc_installed() && strpos( $key, 'cart' ) !== false && ! \is_cart() ) { continue; } // if ( is_wc_installed() && strpos( $key, 'single' ) !== false && ! \is_singular( 'product' ) ) { // continue; // } if ( is_wc_installed() && strpos( $key, 'order-completed' ) !== false && ! \is_order_received_page() ) { continue; } if ( ! empty( $value['file'] ) ) { $urls[ "brandy_{$value['file']}" ] = self::get_public_url_base() . $value['file']; } } return $urls; } }