Очистка тегов script
Я хочу очистить теги <script>
, генерируемые WordPress, чтобы получить более семантичный вывод для HTML5.
Для тегов <style>
это уже можно сделать с помощью следующего кода, подключенного к фильтру style_loader_tag
:
// очистка стандартных тегов стилей WordPress
add_filter('style_loader_tag', 'clean_style_tag');
function clean_style_tag($input) {
preg_match_all("!<link rel='stylesheet'\s?(id='[^']+')?\s+href='(.*)' type='text/css' media='(.*)' />!", $input, $matches);
// отображаем media только для print
$media = $matches[3][0] === 'print' ? ' media="print"' : '';
return '<link rel="stylesheet" href="' . $matches[2][0] . '"' . $media . '>' . "\n";
}
Но эквивалентного фильтра script_loader_tag
в ядре пока нет. Это предлагалось в прошлом, но сейчас нам нужно обходное решение.
Я начал изучать /wp-includes/class.wp-scripts.php
, в частности функцию function do_item( $handle, $group = false )
около строки 79, которая отвечает за вывод скриптов (особенно строки 117-120), но у меня возникли трудности с поиском подходящего фильтра для этого случая.

Если вы действительно хотите это сделать, то это уже должно быть возможно.
global $wp_scripts
является экземпляром класса WP_Scripts
, который в свою очередь является экземпляром класса WP_Dependencies
.
Так что в теории (не проверялось), вы должны иметь возможность сделать что-то вроде этого:
function alter_script_tags()
{
echo '<pre>';
print $GLOBALS['wp_scripts']->print_html;
echo '</pre>';
}
add_action( 'wp_enqueue_scripts', 'alter_script_tags', 999999 );
Это всего лишь грубый набросок, но вы должны уловить идею.

Похоже, это уже пытались сделать некоторое время назад https://github.com/retlehs/roots/blob/6492fe93187c79a9a8b0bce9fb006fb2f3aa75cc/inc/roots-scripts.php, и я помню, что при тестировании возникали некоторые проблемы - я продолжу исследовать этот вопрос. Спасибо.

@Zach Ehm, где ты видишь print_html
в этом коде? Ссылка, которую ты привел, не имеет ничего общего с тем, что я написал выше. Я предлагаю перехватить переменную $print_html
, которая содержит вывод, так как это единственная возможность действительно что-то изменить вместо замены (и тем самым сохранить совместимость с плагинами и темами). Кстати: если тебе нравится мой ответ, я буду признателен за голос "за".

Не уверен в совместимости с версией WP, но взят из модуля плагина Soil clean-up.php
для Roots. Используйте в functions.php
вашей темы или аналогичном файле.
// Очистка тега script
function clean_script_tag($input) {
// Удаление атрибута type='text/javascript'
$input = str_replace("type='text/javascript' ", '', $input);
// Замена одинарных кавычек на двойные
return str_replace("'", '"', $input);
}
// Добавление фильтра для тегов загружаемых скриптов
add_filter('script_loader_tag', 'clean_script_tag');
