บริบท
ฉันสร้างชุดรูปแบบเด็กตาม Twenty Thirteen ซึ่งทำงานได้ค่อนข้างดี หลังจากการปรับปรุงรูปแบบแม่เพื่อรุ่น 1.3 style.css
ผมสังเกตเห็นพฤติกรรมแปลกกับสไตล์ที่มีสาเหตุมาจากรูปแบบการปกครองที่เก็บไว้ชั่วคราวของ
นี่คือเนื้อหาของชุดรูปแบบลูกของฉันstyle.css
(ละเว้นส่วนหัว)
/* =Imports styles from the parent theme
-------------------------------------------------------------- */
@import url('../twentythirteen/style.css');
ดังนั้นรูปแบบเด็กเป็นไม่ได้ทำอะไรมากไปกว่าการนำเข้าธีมของผู้ปกครองstyle.css
style.css
ฉันยังมีไฟล์ css อีกไฟล์ที่มีการปรับแต่งธีมลูกของฉันซึ่งฉันเข้าคิวด้วยเช่นนี้ในfunctions.php
:
// Enqueue parent theme's style.css (faster than using @import in our style.css)
$themeVersion = wp_get_theme()->get('Version');
// Enqueue child theme customizations
wp_enqueue_style('child_main', get_stylesheet_directory_uri() . '/css/main.css',
null, $themeVersion);
นี่ทำให้ฉันมี CSS ที่ดีมาก ๆ เช่นนี้: domain.com/wp-content/themes/toutprettoutbon/css/main.css?ver=1.0.1
ทำให้แน่ใจว่าสไตล์ชีทจะถูกบรรจุใหม่เมื่ออัปเดตธีมลูก
ตอนนี้ปัญหา
คำสั่ง@import url('../twentythirteen/style.css');
ไม่ขึ้นอยู่กับเวอร์ชันของธีมหลักที่เกี่ยวข้อง ในความเป็นจริงรูปแบบที่ผู้ปกครองสามารถปรับปรุงได้โดยไม่มีการปรับปรุงรูปแบบเด็ก ../twentythirteen/style.css
แต่เบราว์เซอร์จะยังคงใช้รุ่นเก่าที่เก็บไว้ชั่วคราว
รหัสที่เกี่ยวข้องในยี่สิบสามที่ enqueues style.css
:
function twentythirteen_scripts_styles() {
// ...
// Add Genericons font, used in the main stylesheet.
wp_enqueue_style( 'genericons', get_template_directory_uri() . '/genericons/genericons.css', array(), '3.03' );
// Loads our main stylesheet.
wp_enqueue_style( 'twentythirteen-style', get_stylesheet_uri(), array(), '2013-07-18' );
// Note usage of get_stylesheet_uri() which actually enqueues child-theme/style.css
// Loads the Internet Explorer specific stylesheet.
wp_enqueue_style( 'twentythirteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentythirteen-style' ), '2013-07-18' );
}
add_action( 'wp_enqueue_scripts', 'twentythirteen_scripts_styles' );
ฉันสามารถคิดถึงวิธีแก้ปัญหานี้สองสามวิธี แต่ไม่มีใครพอใจ:
อัปเดตชุดรูปแบบลูกของฉันทุกครั้งที่มีการปรับปรุงชุดรูปแบบหลักเพื่อเปลี่ยนสายรุ่นใน
style.css
(เช่น@import url('../twentythirteen/style.css?ver=NEW_VERSION');
) สิ่งนี้สร้างลิงก์ที่ไม่จำเป็นและน่ารำคาญระหว่างเวอร์ชันของธีมหลักกับลูกในเด็กของฉัน
functions.php
, 1)wp_dequeue_style
ธีมเด็กรวมของstyle.css
และ 2) ปกครองธีมเป็นโดยตรงกับสตริงรุ่น สิ่งนี้จะทำให้ลำดับของ CSS ที่อยู่ในคิวในธีมหลักเสียหายwp_enqueue_style
style.css
ใช้
style_loader_tag
ตัวกรองเพื่อแก้ไข<link>
แท็กcss ที่สร้างขึ้นสำหรับstyle.css
และปรับเปลี่ยนพา ธ เพื่อชี้ไปยังสตริงหลักของชุดรูปแบบParentโดยตรงstyle.css
ดูเหมือนจะค่อนข้างคลุมเครือสำหรับความต้องการทั่วไป (การป้องกันแคช)การถ่ายโอนข้อมูลของธีมปกครองในรูปของบุตรหลาน
style.css
style.css
เหมือนกับ (1) จริง ๆ แต่เร็วกว่าเล็กน้อยทำให้รูปแบบของเด็ก
style.css
เป็น symlinkstyle.css
ไปของธีมพ่อแม่ ดูเหมือนว่าจะค่อนข้างแฮ็ก ...
ฉันพลาดอะไรไปหรือเปล่า ข้อเสนอแนะใด ๆ
แก้ไข
เพิ่มgenericicons.css
และie.css
สไตล์ชีทในชุดรูปแบบหลักเพื่อชี้แจงว่าทำไมฉันไม่สามารถเปลี่ยน@import
คำสั่ง css เป็นwp_enqueue_style
ในธีมลูกของฉัน ขณะนี้มี@import
คำสั่งในชุดรูปแบบลูกของstyle.css
ฉันฉันมีคำสั่งนี้ในหน้าสร้าง:
- ยี่สิบสาม / genericons / genericons.css -> จัดทำโดยธีมผู้ปกครอง
- child-theme / style.css -> จัดทำโดยชุดรูปแบบผู้ปกครอง @imports ยี่สิบสาม / style.css
- ยี่สิบสาม / css / ie.css -> จัดทำโดยชุดรูปแบบผู้ปกครอง
- child-theme / css / main.css -> จัดทำโดยธีมลูก
ถ้าฉันเข้าสุหนัตของผู้ปกครองstyle.css
เป็นการพึ่งพาของmain.css
สิ่งนี้จะกลายเป็น:
- ยี่สิบสาม / genericons / genericons.css -> จัดทำโดยธีมผู้ปกครอง
- child-theme / style.css -> ว่างจัดทำโดยธีมผู้ปกครอง
- ยี่สิบสาม / css / ie.css -> จัดทำโดยชุดรูปแบบผู้ปกครอง
- ยี่สิบสาม / style.css -> จัดทำโดยชุดรูปแบบของเด็กที่ขึ้นอยู่กับ main.css
- child-theme / css / main.css -> จัดทำโดยธีมลูก
โปรดทราบว่า ie.css style.css
จะรวมอยู่ในขณะนี้ก่อนของธีมปกครอง ฉันไม่ต้องการเปลี่ยนลำดับการจัดคิวของไฟล์ css ของธีมพาเรนต์เพราะฉันไม่สามารถสันนิษฐานได้ว่าสิ่งนี้จะไม่ทำให้เกิดปัญหากับลำดับความสำคัญของกฎ css
style.css
จะไม่รวมอยู่ในสถานที่เดียวกันกับที่เป็นอยู่ในขณะนี้ พาเรนต์มีไฟล์ css อื่น ๆ ซึ่งต้องอยู่ระหว่างstyle.css
CSS และธีมลูกของฉัน
@import
ให้ตั้งค่าสไตล์ชีทของธีมหลักเป็นการอ้างอิงสไตล์ชีทของคุณเองแทน