WordPress как на ладони

Как в wordpress добавить произвольный атрибут к подключаемому скрипту?

У меня в functions.php подключен скрипт:

 wp_enqueue_script( 'script', get_template_directory_uri() . '/assets/script.js', array(), _S_VERSION, true );

Мне надо подключить к этому скрипту type = "module". Подскажите, как это сделать?

0
Djony
2.9 лет назад
  • 1
    stepan2278 www.weblancer.net/users/stepanko/?affili...

    Ответ на ваш вопрос:

    https://stackoverflow.com/questions/58931144/enqueue-javascript-with-type-module

    Также не забывайте отмечать здесь вопрос, как решенным.

    add_filter( 'script_loader_tag', 'add_type_attribute' , 10, 3 );
    
    function add_type_attribute($tag, $handle, $src) {
    	// if not your script, do nothing and return original $tag
    	if ( 'your-script-handle' !== $handle ) {
    		return $tag;
    	}
    	// change the script tag by adding type="module" and return it.
    	$tag = '<script type="module" src="' . esc_url( $src ) . '"></script>';
    	return $tag;
    }
    Kama 2.9 лет назад

    Я бы тут лучше

    $tag = '<script type="module" src="' . esc_url( $src ) . '"></script>';

    Записал более универсально, т.к. в теге могут быть и другие атрибуты, в частности с недавнего времени ВП туда id стал добавлять.

    // удалим текущий type если он есть
    $tag = preg_replace( '/ type=([\'"])[^\'"]+\1/', '', $tag ); 
    
    // добавим type
    $tag = str_replace( 'src=', 'type="module" src=', $tag );

    Проверка работы кода:

    $tag = "<script type='text/javascript' src='https://wp.ru/wp-includes/js/admin-bar.min.js?ver=5.8.2' id='admin-bar-js'></script>";
    
    // удалим текущий type если он есть
    $tag = preg_replace( '/ type=([\'"])[^\'"]+\1/', '', $tag ); 
    
    // добавим type
    $tag = str_replace( 'src=', 'type="module" src=', $tag );
    
    // $tag >> <script type="module" src='https://wp.ru/wp-includes/js/admin-bar.min.js?ver=5.8.2' id='admin-bar-js'></script>
    Djony 2.9 лет назад

    Большое Спасибо за помощь!

    Комментировать
  • 1
    Kama9766

    Готовый код:

    $script_id = 'script';
    $tpl_url = get_template_directory_uri();
    
    wp_enqueue_script( $script_id, "$tpl_url/assets/script.js", [], _S_VERSION, true );
    
    $enqueue_script_add_type_attribute = static function( $tag, $handle ) use ( $script_id ) {
    
    	// if not your script, do nothing and return original $tag
    	if ( $script_id !== $handle ) {
    		return $tag;
    	}
    
    	// remove the current type if there is one
    	$tag = preg_replace( '/ type=([\'"])[^\'"]+\1/', '', $tag ); 
    
    	// add type
    	$tag = str_replace( 'src=', 'type="module" src=', $tag );
    
    	return $tag;
    }
    
    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация