style_loader_tag
style_loader_tag является официальным API WordPress, см. документацию: https://developer.wordpress.org/reference/hooks/style_loader_tag/
apply_filters( 'style_loader_tag', $html, $handle, $href, $media )
Фильтрует тег HTML-ссылки в стиле в очереди.
Сначала поставьте свою таблицу стилей в очередь, см. Документацию: https://developer.wordpress.org/reference/functions/wp_enqueue_style/
wp_enqueue_style( 'font-awesome-5', 'https://use.fontawesome.com/releases/v5.5.0/css/all.css', array(), null );
$handle
Это 'font-awesome-5'
я null
так , что нет номера версии. Таким образом, он будет кэширован.
Простое str_replace
Простого str_replace достаточно для достижения того, что вы хотите, см. Пример ниже
function add_font_awesome_5_cdn_attributes( $html, $handle ) {
if ( 'font-awesome-5' === $handle ) {
return str_replace( "media='all'", "media='all' integrity='sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU' crossorigin='anonymous'", $html );
}
return $html;
}
add_filter( 'style_loader_tag', 'add_font_awesome_5_cdn_attributes', 10, 2 );
Добавление разных атрибутов
Ниже приведен пример добавления разных атрибутов в (несколько) разных таблиц стилей.
function add_style_attributes( $html, $handle ) {
if ( 'font-awesome-5' === $handle ) {
return str_replace( "media='all'", "media='all' integrity='sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU' crossorigin='anonymous'", $html );
}
if ( 'another-style' === $handle ) {
return str_replace( "media='all'", "media='all' integrity='blajbsf' example", $html );
}
if ( 'bootstrap-css' === $handle ) {
return str_replace( "media='all'", "media='all' integrity='something-different' crossorigin='anonymous'", $html );
}
return $html;
}
add_filter( 'style_loader_tag', 'add_style_attributes', 10, 2 );
Добавление атрибутов ко всем стилям.
Ниже приведен пример добавления одинаковых атрибутов к нескольким таблицам стилей.
function add_attributes_to_all_styles( $html, $handle ) {
// add style handles to the array below
$styles = array(
'font-awesome-5',
'another-style',
'bootstrap-css'
);
foreach ( $styles as $style ) {
if ( $style === $handle ) {
return str_replace( "media='all'", "media='all' integrity='sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU' crossorigin='anonymous'", $html );
}
}
return $html;
}
add_filter( 'style_loader_tag', 'add_attributes_to_all_styles', 10, 2 );
script_loader_tag
Я также хотел бы объяснить script_loader_tag, потому что это также удобно, но этот API работает в сочетании с wp_enqueue_script .
API script_loader_tag практически одинаков, только небольшие отличия см. В документации: https://developer.wordpress.org/reference/hooks/script_loader_tag/
apply_filters( 'script_loader_tag', $tag, $handle, $src )
Фильтрует HTML-тег сценария сценария в очереди.
Ниже приведен пример отложить один скрипт
function add_defer_jquery( $tag, $handle ) {
if ( 'jquery' === $handle ) {
return str_replace( "src", "defer src", $tag );
}
return $tag;
}
add_filter( 'script_loader_tag', 'add_defer_jquery', 10, 2 );
Ниже приведен пример отложить более одного сценария
function add_defer_attribute( $tag, $handle ) {
// add script handles to the array below
$scripts_to_defer = array(
'jquery',
'jquery-migrate',
'bootstrap-bundle-js'
);
foreach ( $scripts_to_defer as $defer_script ) {
if ( $defer_script === $handle ) {
return str_replace( "src", "defer src", $tag );
}
}
return $tag;
}
add_filter( 'script_loader_tag', 'add_defer_attribute', 10, 2 );
Итак, я объяснил как API, так style_loader_tag
и script_loader_tag
. И я привел несколько примеров для обоих API, я надеюсь, что это полезно для многих людей там. У меня есть опыт работы с обоими API.
ОБНОВЛЕНИЕ
@CKMacLeod Спасибо за ваше обновление, это проясняет ситуацию. Мы в основном на одной странице. Как я уже сказал, я разработчик WordPress, и если вы хотите опубликовать тему и / или плагин на https://wordpress.org, вы, по сути, вынуждены соблюдать « Стандарты кодирования WordPress », или они просто отклонят вашу тема и / или плагин.
Вот почему я призываю разработчиков использовать «путь WordPress». Я понимаю, что иногда нет никаких отличий, но это также удобство. Как вы сами сказали, вы можете скачать Font Awesome и включить его в свою тему и / или плагин, таким образом вам нужно будет только удалить функцию style_loader_tag и изменить функцию wp_enqueue_style.
И последнее, что в прошлом (5 лет назад) некоторые плагины для кеширования, объединения и минимизации не работали, и в большинстве случаев я выяснял, почему разработчики, создавшие тему, просто ставят вещи в голову в теме и / или повторил их. Большинство плагинов для кэширования, которые также (в большинстве случаев) предоставляют возможности комбинировать, минимизировать и задерживать выполнение скриптов, стали умнее и эффективнее в обнаружении плохого кода и обходе его. Но это не является предпочтительным. Вот почему я призываю людей программировать с учетом стандартов / соглашений.
Как разработчику, вы всегда должны учитывать, что люди могут делать с вашим кодом, и учитывать совместимость. Так что не просто решение, а лучшее оптимальное решение. Я надеюсь, что разъяснил свою точку зрения.
РЕДАКТИРОВАТЬ
@CKMacLeod Спасибо за (технические) дебаты, я надеюсь, что вы понимаете, насколько это важно (используя WordPress API в вашей собственной разработке). Опять же, я смотрел вокруг и даже сейчас, если я смотрю на часто задаваемые вопросы о самых популярных плагинах minify, я обычно вижу это так или иначе, например:
Вопрос: Почему некоторые файлы CSS и JS не объединяются?
Ответ: Плагин обрабатывает только файлы JS и CSS, поставленные в очередь с использованием официального метода WordPress API -
https://developer.wordpress.org/themes/basics/inclusive-css-javascript/,
а также файлы из одного домена (если не указано иное). в настройках).
Смотрите FAQ: https://wordpress.org/plugins/fast-velocity-minify/