style_loader_tag
style_loader_tag เป็น WordPress API อย่างเป็นทางการ, ดูเอกสาร: 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เพื่อให้มีหมายเลขรุ่นไม่มี วิธีนี้จะถูกแคช
Simple str_replace Simple 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
script_loader_tag API เกือบเหมือนกันมีความแตกต่างเพียงเล็กน้อยเท่านั้นดูเอกสารประกอบ: 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
UPDATE
@CKMacLeod ขอบคุณสำหรับการอัปเดตของคุณสิ่งนี้ชัดเจน เราส่วนใหญ่อยู่ในหน้าเดียวกัน อย่างที่ฉันบอกว่าฉันเป็นนักพัฒนา WordPress และถ้าคุณต้องการเผยแพร่ธีมและ / หรือปลั๊กอินบนhttps://wordpress.orgคุณจำเป็นต้องปฏิบัติตาม " มาตรฐานการเข้ารหัสของ WordPress " ไม่เช่นนั้นพวกเขาจะปฏิเสธคุณ ธีมและ / หรือปลั๊กอิน
นั่นเป็นเหตุผลที่ฉันสนับสนุนให้นักพัฒนาออกไปใช้ "วิธี WordPress" ฉันเข้าใจว่าบางครั้งไม่มีความแตกต่างใด ๆ แต่ก็สะดวก ดังที่คุณพูดด้วยตนเองว่าคุณสามารถดาวน์โหลด Font Awesome และรวมไว้ในธีมและ / หรือปลั๊กอินของคุณได้ด้วยวิธีนี้คุณเพียงแค่ลบฟังก์ชั่น style_loader_tag และแก้ไขฟังก์ชั่น wp_enqueue_style ของคุณ
และสิ่งหนึ่งที่ผ่านมาในอดีต (5 ปีที่แล้ว) บางแคชการรวมและการลดขนาดปลั๊กอินไม่ทำงานและส่วนใหญ่ฉันจะพบว่าทำไมนักพัฒนาเหล่านั้นที่สร้างธีมเพียงแค่นำสิ่งต่าง ๆ มาใส่ในธีมและ / หรือสะท้อนพวกเขา ปลั๊กอินแคชส่วนใหญ่ซึ่งส่วนมาก (ส่วนใหญ่) มีตัวเลือกในการรวมลดขนาดและชะลอการเรียกใช้สคริปต์อย่างชาญฉลาดและตรวจจับโค้ดที่ไม่ดีและทำงานได้ดีขึ้น แต่สิ่งนี้ไม่เป็นที่ต้องการ นั่นเป็นเหตุผลที่ฉันสนับสนุนให้ผู้คนเขียนรหัสด้วยมาตรฐาน / ข้อตกลงในใจ
ในฐานะนักพัฒนาคุณต้องคำนึงถึงสิ่งที่ผู้คนสามารถทำกับโค้ดของคุณและคำนึงถึงความเข้ากันได้ ดังนั้นไม่ควรใช้วิธีแก้ปัญหาง่ายๆ ฉันหวังว่าฉันได้ชี้แจงมุมมองของฉัน
EDIT
@CKMacLeod ขอบคุณสำหรับการอภิปราย (ทางเทคนิค) ฉันหวังว่าคุณจะรู้ว่าเรื่องนี้มีความสำคัญเพียงใด (โดยใช้ WordPress API ในการพัฒนาของคุณเอง) อีกครั้งฉันได้รับการมองไปรอบ ๆ และแม้ว่าตอนนี้ถ้าฉันดูคำถามที่พบบ่อยของปลั๊กอินลดขนาดที่นิยมมากที่สุดที่ฉันมักจะเห็นวิธีนี้หรืออื่น ๆ ตัวอย่างเช่น:
คำถาม:เหตุใดไฟล์ CSS และ JS บางไฟล์จึงไม่ถูกรวมกัน
คำตอบ:ปลั๊กอินประมวลผลไฟล์ JS และ CSS เท่านั้นโดยใช้วิธี WordPress API อย่างเป็นทางการ -
https://developer.wordpress.org/themes/basics/including-css-javascript/-
รวมถึงไฟล์จากโดเมนเดียวกัน (เว้นแต่จะระบุไว้ ในการตั้งค่า)
ดูคำถามที่พบบ่อย: https://wordpress.org/plugins/fast-velocity-minify/