Ghi số phiên bản cho biểu định kiểu chính của chủ đề con


10

Trong header.php, tôi muốn gán một số phiên bản cho biểu định kiểu để trình duyệt buộc phải làm mới nó. Nhưng khi làm việc với một chủ đề con, biểu định kiểu của nó không được gọi rõ ràng, thay vào đó WordPress sẽ tự động tìm kiếm nó. Vậy làm thế nào hoặc ở đâu để quy một số phiên bản cho biểu định kiểu của chủ đề con?

Câu trả lời:


4

Bạn có thể cập nhật phiên bản trong bảng kiểu chủ đề con ...

/*
 Theme Name:   Twenty Fourteen Child
 Theme URI:    http://example.com/twenty-fourteen-child/
 Description:  Twenty Fourteen Child Theme
 Author:       John Doe
 Author URI:   http://example.com
 Template:     twentyfourteen
 Version:      1.1.2 <---- Update here
*/

Bạn có chắc chắn rằng điều này nhất thiết sẽ xóa bất kỳ biểu định kiểu được lưu trong bộ nhớ cache nào và buộc phiên bản mới được tải, giống như khi thêm số phiên bản trong header.php không?
Drainke035

Có, nếu bạn nhìn vào nguồn trang, bạn sẽ thấy chuỗi truy vấn được cập nhật khi bạn thay đổi số phiên bản trong chủ đề con style style.css
Matt Royal

7
Điều này vẫn còn hoạt động? Đối với tôi, việc thay đổi phiên bản trong style.css của chủ đề con không có gì khác biệt - chuỗi truy vấn style.css trong phần đầu vẫn xuất hiện dưới dạng số phiên bản Wordpress (trong trường hợp này là 4.1.1).
Tim Malone

2
Nó phụ thuộc vào cách chủ đề của bạn đã được thiết lập. Nhìn xuống trang trả lời @kraftner. Nếu chủ đề của bạn không đăng ký và sau đó đăng ký lại tệp thì điều này sẽ không hoạt động.
Matt Royal

4
Đã có một cái nhìn khác và phiên bản mặc định bây giờ dựa trên phiên bản WP. Vì vậy, câu trả lời này không còn giá trị! ( github.com/WordPress/WordPress/blob/ mẹo )
Matt Royal

13

Tôi nghĩ cách tốt nhất để làm điều này là để trống biểu định kiểu chủ đề con (style.css) chỉ với các nhận xét cần thiết (như tên chủ đề, mô tả, v.v. để wordpress có thể nhận ra chủ đề của bạn) và sau đó tạo một tệp css khác trong- tên chủ đề-thư mục / css / main.css

Sau đó trên function.php, bạn có thể có một "phiên bản" mới mỗi khi bạn thay đổi tệp của mình:

function my_scripts_and_styles(){

$cache_buster = date("YmdHi", filemtime( get_stylesheet_directory() . '/css/main.css'));
wp_enqueue_style( 'main', get_stylesheet_directory_uri() . '/css/main.css', array(), $cache_buster, 'all' );

}

add_action( 'wp_enqueue_scripts', 'my_scripts_and_styles', 1);

Hợp lý:

Mỗi khi bạn lưu tệp, thời gian sửa đổi của tệp sẽ được thay đổi. Thời gian mới đang được chuyển sang hàm ngày để chuyển đổi thời gian (filemtime trả về một số nguyên biểu thị thời gian) thành định dạng ngày để biến nó thành một chuỗi theo định dạng bạn mong muốn. Trong ví dụ của chúng tôi, thời gian đang được định dạng với độ chính xác của phút. Bạn có thể thay đổi nó để theo dõi ngay cả giây tức là "YmdHis". Sau đó, thời gian sửa đổi mới của tệp đang được chuyển thành phiên bản mới wp_enqueue_style.

Tài liệu tham khảo :

http://www.php.net/filemtime

http://php.net/manual/en/feft.date.php


2
Tôi thích sử dụng phiên bản chủ đề như buster cache. Nếu bạn sử dụng, $cache_buster = wp_get_theme()->get('Version')bạn sẽ nhận được phiên bản được chỉ định trong khối nhận xét style.css. Xem codex.wordpress.org/Function_Reference/wp_get_theme để tham khảo.
Marcel Stor

Nice không biết sự tồn tại của chức năng này. Nhưng một lần nữa, bạn phải thay đổi phiên bản thủ công mỗi lần bạn thực hiện thay đổi và nó có thể bị thất vọng đặc biệt là khi phát triển (các vấn đề về bộ đệm đã cho). Ngoài ra, bạn có nghĩa vụ phải mã trong style.css ngay cả khi bạn nhập tệp main.css của mình ở đó, nhưng btw tôi không thấy đó là một cách tiếp cận tốt. Hơn nữa, nếu bạn viết mã trong SASS, việc duy trì nó một lần nữa có thể khó khăn. Cuối cùng tôi nghĩ rằng kiểm tra thời gian tệp nhanh hơn so với mở tệp, đọc các bình luận đầu tiên và tìm phiên bản (tôi không chắc chắn nếu wp_get_theme()->get('Version')hoạt động theo cách đó).
Laxmana

Đúng, nhưng về mặt tích cực, bạn sẽ kiểm soát tốt hơn phong cách của mình. Bạn có thể cập nhật CSS tăng dần và khi bạn hài lòng với kết quả, cuối cùng bạn cũng có thể nâng cấp phiên bản và "phát hành" nó.
Marcel Stor

1
"phát hành" nó cho người dùng đang quay lại trang web. người dùng mới thấy mới bất cứ điều gì trong tập tin.
ryanrain

10

Những gì bạn cần làm là hủy đăng ký kiểu chính bằng cách xử lý và sau đó đăng ký lại với số phiên bản của bạn. Trong trường hợp này xử lý là style-css.

Bạn có thể xác định tay cầm mà bạn cần sử dụng bằng cách nhìn vào liên kết biểu định kiểu được kết xuất:

<link rel='stylesheet' id='style-css-css'  href='http://site-url/wp-content/themes/child-theme/style.css?ver=4.6.1' type='text/css' media='all' />

Ở đây id là style-css-csscó nghĩa là xử lý của chúng tôi làstyle-css

Đặt cái này trong hàm.php của chủ đề con bạn:

function wpse_145141_change_style_version(){
    // First de-register the main stylesheet
    wp_deregister_style( 'style-css' );
    // Then add it again, using your custom version number
    wp_register_style( 'style-css', get_stylesheet_uri(), array(), "VERSION_NUMBER" );
    //finally enqueue it again
    wp_enqueue_style( 'style-css');
}

add_action( 'wp_enqueue_scripts', 'wpse_145141_change_style_version');

1

Câu trả lời hàng đầu hiện tại phụ thuộc vào chủ đề, vì nó yêu cầu nhà phát triển chủ đề biến số phiên bản chủ đề con đó thành một biến và sau đó gắn nó vào style.css con khi mê hoặc nó. Tôi đã thấy điều này trên một số chủ đề, nhưng không nhiều. Phần sau đây hoạt động trên bất kỳ chủ đề nào đăng ký kiểu con trong hàm.php - sẽ không hoạt động với quy tắc @import cũ mà tôi không thấy nhiều nữa.

Trong hàm.php của chủ đề con, bạn sẽ có một cái gì đó tương tự như thế này:

// enqueue the child theme stylesheet

function wp_schools_enqueue_scripts() {
  wp_register_style( 'childstyle', get_stylesheet_directory_uri() . '/style.css'  );
  wp_enqueue_style( 'childstyle' );
}
add_action( 'wp_enqueue_scripts', 'wp_schools_enqueue_scripts', 11);

Nếu bạn thay đổi nó thành như sau, nó sẽ nối dấu thời gian dưới dạng số phiên bản mỗi khi tệp được lưu, cho phép mỗi thay đổi của biểu định kiểu sẽ chuyển qua bộ đệm cục bộ:

 // enqueue the child theme stylesheet

 function wp_schools_enqueue_scripts() {
   wp_register_style( 
     'childstyle', 
     get_stylesheet_directory_uri() . '/style.css', 
     array(), 
     filemtime( get_stylesheet_directory() . '/style.css' ) 
   );
   wp_enqueue_style( 'childstyle' );
 }
 add_action( 'wp_enqueue_scripts', 'wp_schools_enqueue_scripts', 11);

Hy vọng điều này sẽ giúp được ai đó. Tôi sử dụng điều này trên mọi trang web mà tôi tích cực quản lý.


0

Tôi tin rằng nếu bạn sử dụng trình chỉnh sửa chủ đề Wordpress để chỉnh sửa biểu định kiểu của chủ đề con bạn, nó sẽ tự động nối thêm số phiên bản mới mỗi khi bạn lưu tệp.


1
Đúng nhưng tôi không sử dụng trình soạn thảo WP để làm việc trên các bảng định kiểu của mình ..
Drainke035

0

Thay vì sử dụng style.css mặc định, tôi thường sử dụng wp_enqueue_style trong tệp.php của chủ đề con hoặc tệp php đi kèm khác. Vì vậy, bạn vẫn có style.css trong chủ đề con với tất cả các chi tiết chủ đề con nhưng sau đó bạn có thể có một tệp css riêng trong chủ đề con để tạo kiểu chủ đề con thực tế (tôi thường đặt nó trong một tài sản / css thư mục trong chủ đề con). Điều này cũng sẽ cho phép bạn đặt phiên bản CSS với tham số thứ 4. Ví dụ:

function theme_name_child_scripts() {
    wp_enqueue_style( 'style-name', get_stylesheet_directory_uri() . '/assets/css/child-style.css', array(), '1.0.0', 'screen');
}

add_action( 'wp_enqueue_scripts', 'theme_name_child_scripts' );

Bạn có thể thêm mức độ ưu tiên cho hành động nếu nó không tải theo đúng thứ tự hoặc hoạt động với tham số phụ thuộc trong wp_enqueue_style ở trên:

add_action( 'wp_enqueue_scripts', 'theme_name_child_scripts', 20 );
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.