Atribuirea unui număr de versiune pentru foaia de stil principală a unei teme copil
În header.php, îmi place să atribui un număr de versiune la foaia de stil pentru a forța browser-ul să o reîmprospăteze. Dar când lucrez cu o temă copil, foaia sa de stil nu este apelată explicit, ci WordPress o caută automat. Așadar, cum sau unde să atribui un număr de versiune la foaia de stil a temei copil?

Cred că cea mai bună metodă este să lăsați fișierul de stiluri al temei copil (style.css) gol, doar cu comentariile necesare (cum ar fi numele temei, descrierea etc., pentru ca WordPress să-și poată recunoaște tema) și apoi să creați un alt fișier CSS în directorul your-theme-name-folder/css/main.css.
După aceea, în fișierul functions.php puteți avea o „versiune” nouă de fiecare dată când modificați fișierul:
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);
Logica din spate:
De fiecare dată când salvați fișierul, timpul de modificare al acestuia se schimbă. Noul timp este transmis funcției date pentru a converti timpul (filemtime returnează un întreg care reprezintă timpul) în format de dată, pentru a-l transforma într-un șir în formatul dorit. În exemplul nostru, timpul este formatat cu precizie de minute. Puteți modifica acest lucru pentru a urmări chiar și secunde, de exemplu "YmdHis"
. Apoi, noul timp de modificare al fișierului este transmis ca versiune nouă către wp_enqueue_style
.
Referințe:

Prefer să folosesc versiunea temei ca cache buster. Dacă folosești $cache_buster = wp_get_theme()->get('Version')
vei obține versiunea specificată în blocul de comentarii din style.css
. Vezi https://codex.wordpress.org/Function_Reference/wp_get_theme pentru referință.

Interesant, nu știam de existența acestei funcții. Dar din nou, trebuie să schimbi manual versiunea de fiecare dată când faci o modificare și poate fi frustrant mai ales în timpul dezvoltării (din cauza problemelor cu cache-ul). De asemenea, ești obligat să codifici în style.css chiar dacă îți importi fișierul main.css acolo, ceea ce, apropo, nu consider o abordare bună. Mai mult, dacă codezi în SASS poate fi din nou dificil să-l menții. În final, cred că este mai rapid să verifici data fișierului decât să deschizi fișierul, să citești primele comentarii și să găsești versiunea (nu sunt sigur dacă wp_get_theme()->get('Version')
funcționează în acest fel).

Adevărat, dar pe partea pozitivă ai un control mai bun asupra stilurilor tale. Poți actualiza CSS-ul incremental și când ești mulțumit de rezultat poți în final să crești versiunea și să o "eliberezi".

Ceea ce trebuie să faci este să anulezi înregistrarea stilului principal prin handle și apoi să-l înregistrezi din nou cu numărul tău de versiune. În acest caz, handle-ul este style-css
.
Poți determina handle-ul necesar uitându-te la legătura stilului afișată:
<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' />
Aici, ID-ul este style-css-css
, ceea ce înseamnă că handle-ul nostru este style-css
.
Pune acest cod în fișierul function.php al temei tale copil:
function wpse_145141_change_style_version(){
// Mai întâi, anulează înregistrarea stilului principal
wp_deregister_style( 'style-css' );
// Apoi adaugă-l din nou, folosind numărul tău de versiune personalizat
wp_register_style( 'style-css', get_stylesheet_uri(), array(), "VERSION_NUMBER" );
// În final, adaugă-l din nou în coadă
wp_enqueue_style( 'style-css');
}
add_action( 'wp_enqueue_scripts', 'wpse_145141_change_style_version');

Puteți actualiza versiunea direct în fișierul de stil al temei child...
/*
Theme Name: Twenty Fourteen Child
Theme URI: http://example.com/twenty-fourteen-child/
Description: Tema Child Twenty Fourteen
Author: John Doe
Author URI: http://example.com
Template: twentyfourteen
Version: 1.1.2 <---- Actualizați aici
*/

Ești sigur că asta va forța în mod necesar ștergerea oricărui fișier de stil din cache și va încărca noua versiune, la fel ca atunci când adaugi un număr de versiune în header.php?

Da, dacă te uiți la codul sursă al paginii, vei vedea că șirul de interogare se actualizează pe măsură ce modifici numărul de versiune în style.css al temei copil.

Super. Am inițiat o recompensă pentru această întrebare? Matt, spune-mi dacă da, o voi relua și ți-o voi acorda. Mulțumesc!

Am realizat că acum pot oferi doar o recompensă de 100, opțiunea de 50 a dispărut din listă. 100 reprezintă o treime din reputația mea, cam mult... Îmi pare foarte rău!

Funcționează încă asta? Pentru mine, modificarea versiunii în style.css al temei child nu face nicio diferență - șirul de interogare style.css în head apare în continuare ca versiunea Wordpress (în acest caz 4.1.1).

Depinde de cum este configurată tema ta. Vezi răspunsul lui @kraftner mai jos. Dacă tema ta elimină înregistrarea și apoi reînregistrează fișierul, atunci această soluție nu va funcționa.

Am verificat din nou și versiunea implicită acum se bazează pe versiunea WP. Deci acest răspuns nu mai este valid! (https://github.com/WordPress/WordPress/blob/0fa23c1ac2f46ab79c186f4a295648f990758636/wp-includes/class.wp-styles.php#L32)

Răspunsul actual de top depinde de temă, deoarece necesită ca dezvoltatorul temei să fi transformat numărul de versiune al temei copil într-o variabilă și apoi să-l atașeze la fișierul child style.css atunci când este încărcat. Am văzut acest lucru la unele teme, dar nu la multe. Următoarea soluție funcționează pe orice temă care înregistrează stilurile copil în functions.php - nu va funcționa cu vechea regulă @import, pe care nu am mai văzut-o folosită recent.
În functions.php al temei copil, ar trebui să aveți ceva similar cu acest cod:
// încarcă fișierul de stil al temei copil
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);
Dacă modificați codul astfel, se va adăuga un timestamp ca număr de versiune de fiecare dată când fișierul este salvat, permițând fiecărei modificări a fișierului CSS să treacă prin cache-ul local:
// încarcă fișierul de stil al temei copil
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);
Sper că acest lucru îi va ajuta pe cineva. Folosesc această soluție pe fiecare site pe care îl administrez activ.

În loc să folosesc fișierul implicit style.css, de obicei folosesc wp_enqueue_style în functions.php din tema copil sau într-un alt fișier php inclus. Astfel, vei avea în continuare style.css în tema copil cu toate detaliile acesteia, dar poți avea un fișier css separat în tema copil pentru stilizarea efectivă a temei copil (eu de obicei pun acest fișier într-un director assets/css în tema copil). Acest lucru îți permite și să setezi versiunea CSS cu al patrulea parametru. De exemplu:
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' );
Poți adăuga o prioritate la acțiune dacă nu se încarcă în ordinea corectă sau poți lucra cu parametrul de dependență din wp_enqueue_style de mai sus:
add_action( 'wp_enqueue_scripts', 'theme_name_child_scripts', 20 );

Folosește filemtime
pentru a versiona după modificarea fișierului. Dezînregistrează și încarcă stilul.
- Uită-te în sursă (ctrl + U) și găsește ID-ul CSS al fișierului copil fără "-css". Aici este voyager-default
<link rel='stylesheet' id='voyager-default-css' href='/wp-content/themes/voyager-child-theme/style.css?1606484598' type='text/css' media='all' />
- Folosește acest cod (sursă) dar înlocuiește
'style'
cu șirul găsit (aici'voyager-default'
)
Fișierul functions.php al temei copil
function add_timestamp_to_childtheme_stylesheet() {
wp_dequeue_style( 'style' );
wp_deregister_style( 'style' );
wp_enqueue_style('style', get_stylesheet_uri().'?'.filemtime(get_stylesheet_directory().'/style.css'), array(), null);
}
add_action( 'wp_print_styles', 'add_timestamp_to_childtheme_stylesheet' );
