Các vấn đề sắp xếp các biểu định kiểu chủ đề cha mẹ và con với phương thức Codex đã được sửa đổi


9

Bài đăng này đưa ra một vài câu hỏi mà tôi đã gặp liên quan đến những thay đổi gần đây xung quanh các phương pháp vẽ biểu đồ định kiểu được đưa ra trong chủ đề nàychủ đề này .

Các vấn đề tôi gặp phải trong một tình huống sử dụng chung, sử dụng chủ đề gốc được sử dụng rộng rãi và được duy trì tốt, đặc biệt là chủ đề con sẵn sàng trên bản cài đặt WP 4.0. Hàm.php của chủ đề con tôi chỉ chứa wp_enqueue_stylehàm như chi tiết trong Codex .

Xin lưu ý rằng mặc dù mã được tham chiếu bên dưới là dành riêng cho chủ đề này, phần lớn nó sử dụng các quy ước mã hóa hiện tại được sử dụng bởi các chủ đề gốc. Ngoài ra, các lĩnh vực quan tâm của tôi rất có thể trùng lặp trên một số lượng lớn các chủ đề gốc được thiết lập hiện đang tồn tại. Ngoài ra, các câu hỏi nâng cao này có thể áp dụng ở cấp độ phổ quát, bất kể chủ đề gốc nào đang được sử dụng.

VẤN ĐỀ 1: Hai lần

Cài đặt được đề xuất:

Chủ đề phụ huynh là các kiểu chữ viết và kịch bản sử dụng wp_enqueue_scriptshook, phần có liên quan như sau:

add_action('wp_enqueue_scripts', 'parent_theme_function_name');
function parent_theme_function_name() {
    wp_register_style( 'avia-style' ,  $child_theme_url."/style.css", array(),  '2', 'all' );
    wp_enqueue_style( 'avia-base');
    if($child_theme_url !=  $template_url) { wp_enqueue_style( 'avia-style'); }
}

Chủ đề con tôi functions.phpmê hoặc phong cách cho mỗi thay đổi codex gần đây:

add_action( 'wp_enqueue_scripts', 'enqueue_parent_theme_style' );
function enqueue_parent_theme_style() {
    wp_enqueue_style( 'dm-parent-style', get_template_directory_uri().'/style.css' );
}

Lưu ý các ID sau được sử dụng bởi mã được tham chiếu:

  • id='dm-parent-style-css' là bản định kiểu của chủ đề phụ huynh, được bao bọc bởi chức năng chủ đề con tôi
  • id='avia-style-css' là bản định kiểu của chủ đề con tôi, được bao bọc bởi chức năng chủ đề gốc
  • id='dm-child-style-css' là bản định kiểu của chủ đề con tôi, được bao bọc bởi chức năng chủ đề con tôi

Kết quả:

Thoạt nhìn, mọi thứ đều ổn, với <head> hiển thị thứ tự sau:

<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
<!-- Multiple individual parent theme styles here -->
<link rel='stylesheet' id='avia-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />

Sau khi cài đặt một plugin, thứ tự enqueue bây giờ đã thay đổi như sau:

<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
<!-- Multiple individual parent theme styles here -->
<link rel='stylesheet' id='avia-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
<!-- Pesky plugin styles -->

Cuối cùng, tôi cần css của chủ đề con tôi để tải sau bất kỳ plugin nào, vì vậy tôi buộc phải thêm số ưu tiên vào chức năng trong chủ đề con của mình (xem thảo luận trước về số ưu tiên) .

Tuy nhiên, vì chức năng của tôi chỉ bao gồm css của chủ đề gốc, kết quả là bây giờ css của chủ đề gốc đã được chuyển đến cuối cùng, khiến css của chủ đề con tôi rơi vào tình trạng thậm chí còn tồi tệ hơn trước.

<!-- Multiple individual parent theme styles here -->
<link rel='stylesheet' id='avia-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
<!-- Pesky plugin styles -->
<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />

Bây giờ tôi cũng buộc phải dùng đến việc mê hoặc phong cách chủ đề của con tôi, để đảm bảo nó được di chuyển trở lại phía trước của dòng, gây ra vấn đề đã nói ở trên hai thuật ngữ (thuật ngữ mới? Lol) cho chủ đề con css.

Thiết lập không dùng nữa:

Chức năng sửa đổi trong chủ đề con:

add_action( 'wp_enqueue_scripts', 'enqueue_parent_theme_style', 99 );
function enqueue_parent_theme_style() {
    wp_enqueue_style( 'dm-parent-style', get_template_directory_uri().'/style.css' );
    wp_enqueue_style( 'dm-child-style', get_stylesheet_directory_uri().'/style.css' );
}

Kết quả:

Sản xuất theo thứ tự sau <head>:

<!-- Multiple individual parent theme styles here -->
<link rel='stylesheet' id='avia-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
<!-- Pesky plugin styles -->
<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
<link rel='stylesheet' id='dm-child-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />

Mặc dù bao gồm cả biểu định kiểu con trong chức năng của tôi khiến nó bị mê hoặc hai lần, IMHO thích hợp hơn mã hóa theo giả định rằng chủ đề gốc sẽ phù hợp với biểu định kiểu con của chúng ta. Dựa trên ID được gán cho từng kiểu được liệt kê, có vẻ như chủ đề gốc sẽ mê hoặc nó, không phải bất cứ thứ gì trong WP Core.

Shivm của tôi:

Mặc dù tôi hầu như không đề xuất đây là phương tiện được đề xuất (và tôi chắc chắn rằng các nhà phát triển có nhiều kinh nghiệm mã hóa hơn bản thân tôi sẽ than thở về giải pháp này), tôi đã loại bỏ ID của chủ đề phụ huynh (được sử dụng để thể hiện phong cách của chủ đề con tôi) ngay trên sự mê hoặc của chính tôi trong tập tin chức năng của chủ đề con tôi như được hiển thị:

add_action( 'wp_enqueue_scripts', 'enqueue_parent_theme_style', 99 );
function enqueue_parent_theme_style() {
    wp_enqueue_style( 'dm-parent-style', get_template_directory_uri().'/style.css' );
    wp_dequeue_style( 'avia-style' );
    wp_enqueue_style( 'dm-child-style', get_stylesheet_directory_uri().'/style.css' );
}

Kết quả:

Điều này giải quyết các vấn đề trong tay, dẫn đến:

<!-- Multiple individual parent theme styles here -->
<!-- Plugin styles -->
<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
<link rel='stylesheet' id='dm-child-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />

Tất nhiên, điều này đòi hỏi phải biết ID được sử dụng bởi chủ đề gốc - một cái gì đó chung chung hơn sẽ được sử dụng làm phương pháp phát triển chủ đề con tiêu chuẩn.

VẤN ĐỀ 2: Di dời các bảng định kiểu con

.

Tôi không bao giờ sử dụng mặc định style.csstrong thư mục gốc của chủ đề con cho các kiểu chủ đề của mình - rõ ràng nó phải ở đó, nhưng tất cả các kiểu thực tế của tôi được biên dịch từ SCSS dưới dạng tệp .css rút gọn trong thư mục / css /. Mặc dù tôi nhận ra đây không phải là "tiêu chuẩn dự kiến" ở cấp độ phổ biến cho phát triển chủ đề trẻ em, nhưng hầu hết các nhà phát triển WordPress nghiêm túc mà tôi biết đều làm điều tương tự. Tất nhiên, điều này đòi hỏi phải ghi lại thủ công bản định kiểu đó trong chức năng của tôi bất kể chủ đề gốc có thu hút nó hay không.

Tổng hợp tất cả ...

  1. Có an toàn không khi đưa ra giả định rằng các chủ đề phụ huynh phù hợp với các kiểu chủ đề con, theo quan điểm của các tiêu chuẩn chủ đề con?
  2. Xóa mức độ ưu tiên có khả năng tạo ra sự nhầm lẫn nhiều hơn cho một phần của cộng đồng WordPress, khi các kiểu chủ đề con bắt đầu bị ghi đè bởi một plugin. Chúng tôi hy vọng các chủ đề sẽ ghi đè lên các kiểu, nhưng không quá nhiều với các plugin.
  3. Khi sử dụng biểu định kiểu tùy chỉnh cho các kiểu chủ đề con thực tế (như được cho là đặt chúng vào định nghĩa trước style.css), việc ghi lại thủ công tệp đó trở nên cần thiết. Về mặt duy trì tính liên tục trên một phạm vi rộng các nhà phát triển, sẽ không có ý nghĩa gì khi khuyến khích thủ công bản định kiểu con bất kể có thể trùng lặp không?

Tôi chắc chắn có một cuộc tranh luận về cách cấu trúc mối quan hệ chủ đề con-cha mẹ. Tôi không nghĩ an toàn khi chỉ giả sử bất cứ điều gì về chủ đề phụ huynh. Cá nhân tôi thích tải các kiểu thủ công trong một chủ đề con. Nhưng, đó là những quyết định bạn cần đưa ra về bản chất của chủ đề trẻ em và truyền đạt rõ ràng điều đó. Nếu các chủ đề con chỉ dành cho các chỉnh sửa trực quan đơn giản, thì phụ huynh tải biểu định kiểu của trẻ có lẽ vẫn ổn. Nhưng nếu chủ đề gốc là một khung, thì tôi sẽ chuyển sang chủ đề con đang tải các bảng định kiểu.
Seamus Leahy

Câu trả lời:


5

CÂU HỎI 1

Có an toàn không khi đưa ra giả định rằng các chủ đề phụ huynh phù hợp với các kiểu chủ đề con, theo quan điểm của các tiêu chuẩn chủ đề con?

Nguyên tắc chung, vâng. Nhưng , bạn không bao giờ nên giả định . Hầu hết các thảm họa và thất bại trong cuộc sống là do các giả định hoặc sự kiện dựa trên một giả định

SỰ THẬT KHÔNG CÓ ĐÁNH GIÁ

  • Hàm.php của một chủ đề con được tải trước, sau đó là tệp.php của cha. Điều này đảm bảo rằng biểu định kiểu chính của chủ đề gốc được tải trước biểu định kiểu chính của chủ đề con từ mã được cập nhật trong bộ mã

  • Hãy nhìn vào chủ đề đi kèm, hai mươi hai. Điều kỳ diệu xảy ra ở đây wp_enqueue_style( 'twentytwelve-style', get_stylesheet_uri() );. Đây là cách bản định kiểu chính được mê hoặc. Khi chủ đề được kích hoạt dưới dạng chủ đề gốc, style.css sẽ được tải từ chủ đề gốc như get_stylesheet_uri()được trỏ đến style.css của thư mục mẹ.

  • Khi bạn chuyển sang chủ đề con, get_stylesheet_uri()"thay đổi" đường dẫn của nó để trỏ đến style.css của chủ đề con, nghĩa là bây giờ thay vì wp_enqueue_style( 'twentytwelve-style', get_stylesheet_uri() );tải kiểu cha.css, giờ đây nó sẽ tải kiểu con.css

  • Tất cả các kiểu khác từ chủ đề gốc được tải theo bình thường theo thứ tự mà chúng đã viết

VÒI

  • Kiểu nội tuyến và biểu định kiểu được thêm trực tiếp vào mẫu tiêu đề của bạn. Tôi đã thực hiện một số thử nghiệm về vấn đề này. Nếu biểu định kiểu cha không được sử dụng wp_enqueue_scriptsvà được tải trực tiếp trong tiêu đề, thì biểu định kiểu chính của chủ đề con sẽ được tải trước. Như một cách giải quyết ở đây, trước đây tôi đã khuyến nghị sao chép tiêu đề.php của phụ huynh vào chủ đề con và xóa các cuộc gọi đó. Sau đó, bạn sẽ phải enqueueu cả kiểu chủ đề cha và con và bất kỳ biểu định kiểu nào khác được tải trực tiếp trong tiêu đề.php như được giải mã trong hàm OP đã khấu hao

  • Tôi đã bắt gặp điều này một hoặc hai lần trong đó các kiểu (và tập lệnh) được tải trực tiếp trong tiêu đề và vì điều này mà cuộc gọi đến wp_headbị bỏ qua. Điều này sẽ làm cho bạn hành động thất bại âm thầm thất bại, vì vậy phong cách của bạn sẽ không hiển thị.

  • Đặt ưu tiên sai. Không cần thiết phải đặt ưu tiên là hành động của cha mẹ và con cái khi bạn nối các hàm enqueueu. Khi cả hai có cùng mức ưu tiên mặc định, quy tắc đến trước được phục vụ trước được áp dụng. Điều này sẽ đảm bảo rằng thứ tự tải là chính xác

LƯU Ý CHO PHỤ HUYNH

Phương pháp được chấp nhận thích hợp để thêm kiểu và tập lệnh vào một chủ đề là thông qua wp_enqueue_scriptshook hành động. Không bao giờ thêm kiểu và tập lệnh trực tiếp vào mẫu tiêu đề và không đặt bất kỳ ưu tiên nào trong hành động của bạn khi nối chức năng của bạn

Luôn luôn tải biểu định kiểu chính như sau:

wp_enqueue_style( 'twentytwelve-style', get_stylesheet_uri() );

Điều này sẽ đảm bảo rằng biểu định kiểu chính của trẻ được tải khi sử dụng chủ đề con

TRÁCH NHIỆM CỦA BẠN NHƯ MỘT TÁC GIẢ CỦA TRẺ

  • Dành thời gian của bạn và làm việc thông qua các chủ đề phụ huynh. Biết chủ đề gốc của bạn, đảm bảo bạn cảm thấy thoải mái với các cấu trúc chủ đề và cách các chức năng và móc được sử dụng trong chủ đề. Bạn không thể tạo chủ đề con thành công nếu bạn không có kiến ​​thức về cách hoạt động của chủ đề gốc. Bạn có trách nhiệm đảm bảo rằng các kiểu và tập lệnh được tải đúng cách để mã của bạn hoạt động như mong đợi.

  • Luôn luôn làm cho tác giả chủ đề phụ cảnh báo về bất kỳ mã nào bạn không hài lòng. Chẳng hạn, nếu tác giả thêm trực tiếp các kiểu của mình vào tiêu đề, hãy làm cho anh ta cảnh giác về điều đó và làm cho anh ta biết rằng đây là cách làm sai và yêu cầu anh ta sửa nó trong bản phát hành trong tương lai

CÂU HỎI 2

Xóa mức độ ưu tiên có khả năng tạo ra sự nhầm lẫn nhiều hơn cho một phần của cộng đồng WordPress, khi các kiểu chủ đề con bắt đầu bị ghi đè bởi một plugin. Chúng tôi hy vọng các chủ đề sẽ ghi đè lên các kiểu, nhưng không quá nhiều với các plugin

Thật không may, không có phương pháp trực tiếp để safegaurd chống lại điều này. Vấn đề thực tế ở đây là, các kiểu plugin không bao giờ ghi đè lên các kiểu chủ đề mặc định mà không có sự đồng ý của người dùng cuối. Theo tôi, đây chỉ là thực tế xấu hoặc neglet từ tác giả plugin. Tôi sẽ đề nghị rằng trong trường hợp như thế này, hãy liên hệ với tác giả plugin và làm cho anh ta cảnh giác về điều này

Bạn cũng luôn có tùy chọn để loại bỏ và hủy đăng ký một kiểu (và tập lệnh) mà bạn không cần, hoặc bạn cần thay đổi mức độ ưu tiên và yêu cầu và đăng ký lại chúng như trong mã của bạn ở trên (điều này hoàn toàn tốt). Chỉ cần một lưu ý trên shivm của bạn , cách tốt nhất là dequeue hủy đăng ký một phong cách và kịch bản.

CÂU HỎI 3

Khi sử dụng biểu định kiểu tùy chỉnh cho các kiểu chủ đề con thực tế (như được cho là đặt chúng trong style.css được xác định trước), việc ghi lại thủ công tệp đó trở nên cần thiết. Về mặt duy trì tính liên tục trên một phạm vi rộng các nhà phát triển, sẽ không có ý nghĩa gì khi khuyến khích thủ công bản định kiểu con bất kể có thể trùng lặp không?

Tôi không nghĩ có bất kỳ câu trả lời trắng đen trực tiếp nào cho vấn đề này. Tôi sẽ trả lời bằng cách nói, hãy làm những gì bạn cảm thấy thoải mái miễn là nó nằm trong một hướng dẫn nhất định chi phối hành động.

Các bảng định kiểu không có ở đó để thêm chức năng, nhưng ở đó để thêm trải nghiệm hình ảnh cho người dùng. Kiểu cũng được gửi trực tiếp như hiện tại đến trình duyệt đã được xử lý. Wordpress không có vai trò ở đây.

Dựa trên thực tế này, tôi thực sự không thấy bất kỳ lá cờ đỏ nào đe dọa khi tải biểu định kiểu hai lần. Điều này có thể tốn một vài triệu giây trong hiệu suất mặc dù. Thành thật mà nói, ngoài điều này, tôi không thực sự chắc chắn làm thế nào các bản sao được xử lý trên các trình duyệt khác nhau. Đây là điều mà bạn là một người đọc có thể đi và kiểm tra

IMHO, trùng lặp không bao giờ tốt và nên luôn luôn tránh. Tôi sẽ đề nghị rằng nếu bạn thực sự muốn thủ công bản định kiểu chính của trẻ vì lý do gì, bạn nên sử dụng mã của mình trong shivm của mình . Dequeue và hủy đăng ký bản sao được thêm theo mặc định và sau đó yêu cầu biểu định kiểu như bình thường.

Chỉ cần một điều cần nhớ là, các hàm enqueue và register có một $dependancytham số mà bạn cũng có thể sử dụng. Vì vậy, thật dễ dàng để tải một biểu định kiểu phụ và làm cho nó phụ thuộc vào biểu định kiểu chính của chủ đề con bạn

TÓM LẠI LÀ

Kể từ bản cập nhật gần đây của codex, thông tin phản hồi rất tuyệt vời và tôi muốn cảm ơn phản hồi của mọi người về điều này. Tôi muốn khuyến khích tất cả mọi người tham gia vào bất kỳ loại phản hồi nào cho câu hỏi này nói riêng. Nếu bạn có bất cứ điều gì để thêm hoặc nhận xét về, xin vui lòng làm.


Pieter, thx cho câu trả lời thấu đáo của bạn. Hôm nay bị ngập nước nhưng tôi có một vài suy nghĩ dựa trên những gì bạn nói mà tôi hy vọng sẽ thêm vào tối nay.
dMcClintock

Xin hãy làm như vậy. Tôi thực sự muốn nghe những suy nghĩ khác về điều này. Câu trả lời của tôi là ý kiến ​​của tôi dựa trên thử nghiệm của tôi, vì vậy đây chắc chắn không phải là alpha và omega. Nhìn về phía trước cái nhìn sâu sắc của bạn :-)
Pieter Goosen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.