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 шлях". Я розумію, що іноді немає різниці, але це також зручність. Як ви самі сказали, що можете завантажити шрифт Awesome і включити його у свою тему та / або плагін, таким чином вам потрібно буде лише видалити функцію style_loader_tag та змінити функцію wp_enqueue_style.
І останнє, що раніше (5 років тому) деякі кешування, комбінування та мінімізація плагінів не працювали, і більшість випадків я дізнався, чому ті розробники, які створили тему, просто поклали речі в голову в тему і / або відлунювали їх. Більшість плагінів кешування, які також (більшість часу) надають варіанти комбінування, мінімізації та затримки виконання скриптів, стали розумнішими та кращими для виявлення поганого коду та роботи над ними. Але це не є кращим. Ось чому я закликаю людей придумувати норми / конвенції.
Як розробник, вам завжди потрібно враховувати, що люди можуть зробити з вашим кодом, і враховуючи сумісність. Тож не прийняття простого рішення, а найкращого оптимального рішення. Я сподіваюся, що я уточнив свою точку зору.
EDIT
@CKMacLeod Дякую за (технічну) дискусію, сподіваюся, ви зрозумієте, наскільки це важливо (використовуючи API WordPress у власній розробці). Знову ж таки, я оглядався, і навіть зараз, якщо я дивлюся на найпопулярніші плагіни міні-запитань, я зазвичай бачу це так чи інакше, наприклад:
Запитання: Чому деякі файли CSS та JS не об'єднуються?
Відповідь: Плагін обробляє лише файли JS та CSS, запускаються за допомогою офіційного методу API WordPress -
https://developer.wordpress.org/themes/basics/including-css-javascript/
- як і файли з одного домену (якщо не вказано на налаштуваннях).
Див. FAQ: https://wordpress.org/plugins/fast-velocity-minify/