Bối cảnh
Tôi đã xây dựng một chủ đề con dựa trên Twenty Thirteen hoạt động khá tốt. Sau khi cập nhật chủ đề gốc lên phiên bản 1.3, tôi nhận thấy hành vi lạ với kiểu dáng gây ra bởi chủ đề gốc được lưu trong bộ nhớ cache style.css
.
Đây là nội dung của chủ đề con tôi style.css
(bỏ qua các tiêu đề)
/* =Imports styles from the parent theme
-------------------------------------------------------------- */
@import url('../twentythirteen/style.css');
Vì vậy, chủ đề con style.css
không làm gì khác hơn là nhập chủ đề gốc style.css
.
Tôi cũng có một tệp css khác với các tùy chỉnh của chủ đề con tôi mà tôi thích như vậy trong 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);
Điều này mang lại cho tôi một url css rất đẹp như thế này: domain.com/wp-content/themes/toutprettoutbon/css/main.css?ver=1.0.1
đảm bảo rằng biểu định kiểu được tải lại khi chủ đề con được cập nhật.
Bây giờ vấn đề
Tuyên bố @import url('../twentythirteen/style.css');
này hoàn toàn độc lập với phiên bản của chủ đề gốc bên dưới. Trên thực tế, chủ đề gốc có thể được cập nhật mà không cần cập nhật chủ đề con nhưng trình duyệt vẫn sẽ sử dụng các phiên bản được lưu trong bộ nhớ cache cũ ../twentythirteen/style.css
.
Mã có liên quan trong Twenty Thirteen bao gồm 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' );
Tôi có thể nghĩ ra một vài cách để giải quyết vấn đề này nhưng không có cách nào thực sự thỏa đáng:
Cập nhật chủ đề con tôi mỗi khi chủ đề gốc được cập nhật để thay đổi chuỗi phiên bản trong
style.css
(ví dụ@import url('../twentythirteen/style.css?ver=NEW_VERSION');
). Điều này tạo ra một liên kết không cần thiết và gây phiền nhiễu giữa phiên bản chủ đề cha mẹ và con.Trong con của tôi
functions.php
, 1)wp_dequeue_style
các child theme bao gồm củastyle.css
và 2)wp_enqueue_style
các mẹ chủ đề làstyle.css
trực tiếp VỚI chuỗi phiên bản. Điều này làm rối loạn thứ tự của css xếp hàng trong chủ đề chính.Sử dụng
style_loader_tag
bộ lọc để sửa đổi<link>
thẻ css được tạostyle.css
và sửa đổi đường dẫn để trỏ trực tiếp đến chủ đề gốcstyle.css
CÓ chuỗi phiên bản. Có vẻ khá mơ hồ cho một nhu cầu phổ biến như vậy (bộ nhớ cache).Kết xuất chủ đề phụ huynh
style.css
trong chủ đề con tôistyle.css
. Giống như (1) thực sự, nhưng nhanh hơn một chút.Làm cho chủ đề con tôi
style.css
trở thành một liên kết đến chủ đề gốcstyle.css
. Điều này có vẻ khá hackish ...
Tôi đã bỏ lỡ một cái gì đó? Bất kỳ đề xuất?
chỉnh sửa
Đã thêm genericicons.css
và biểu định ie.css
kiểu trong chủ đề gốc để làm rõ lý do tại sao tôi không thể thay đổi @import
câu lệnh css thành wp_enqueue_style
trong chủ đề con. Hiện tại, với một @import
tuyên bố trong chủ đề con tôi style.css
, tôi có thứ tự này trong các trang được tạo:
- hai mươi mười ba / genericons / genericons.css -> mê hoặc chủ đề phụ huynh
- chủ đề con / style.css -> mê hoặc chủ đề phụ huynh, @imports hai mươi mười ba / style.css
- twthirteen / css / eg.css -> mê hoặc chủ đề phụ huynh
- chủ đề con / css / main.css -> mê hoặc chủ đề con
Nếu tôi yêu cầu cha mẹ style.css
là người phụ thuộc main.css
, điều này sẽ trở thành:
- hai mươi mười ba / genericons / genericons.css -> mê hoặc chủ đề phụ huynh
- chủ đề con / style.css -> trống rỗng, bị mê hoặc bởi chủ đề phụ huynh
- twthirteen / css / eg.css -> mê hoặc chủ đề phụ huynh
- twthirteen / style.css -> mê hoặc chủ đề con là sự phụ thuộc của main.css
- chủ đề con / css / main.css -> mê hoặc chủ đề con
Lưu ý rằng eg.css hiện được bao gồm trước chủ đề gốc style.css
. Tôi không muốn thay đổi thứ tự mê hoặc của các tệp css của chủ đề gốc bởi vì tôi không thể cho rằng điều này sẽ không gây ra vấn đề với mức độ ưu tiên của quy tắc css.
style.css
sẽ không được bao gồm tại cùng một nơi như bây giờ. Phụ huynh bao gồm các tệp css khác phải nằm giữa css của nó style.css
và chủ đề con tôi.
@import
, thay vào đó hãy đặt biểu định kiểu của chủ đề gốc làm phụ thuộc của biểu định kiểu của riêng bạn .