Atribuirea unui număr de versiune pentru foaia de stil principală a unei teme copil

21 mai 2014, 20:23:29
Vizualizări: 28.3K
Voturi: 16

Î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?

0
Toate răspunsurile la întrebare 7
4
17

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:

http://www.php.net/filemtime

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

1 iun. 2014 14:24:56
Comentarii

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ță.

Marcel Stör Marcel Stör
2 ian. 2016 16:45:03

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).

Laxmana Laxmana
4 ian. 2016 21:18:45

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".

Marcel Stör Marcel Stör
4 ian. 2016 21:28:48

"eliberează" acest lucru utilizatorilor care revin pe site. noii utilizatori văd conținutul proaspăt din fișier.

ryanrain ryanrain
22 iul. 2017 07:40:14
0
13

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');
28 mai 2014 11:49:04
9

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
*/
28 mai 2014 14:49:17
Comentarii

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?

drake035 drake035
30 mai 2014 13:35:36

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.

Matt Royal Matt Royal
30 mai 2014 14:36:46

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

drake035 drake035
10 iun. 2014 14:59:06

@drake035 Da, ai făcut-o. Asta ar fi minunat, mulțumesc frumos :-)

Matt Royal Matt Royal
10 iun. 2014 16:37:39

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!

drake035 drake035
14 iun. 2014 21:22:47

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).

Tim Malone Tim Malone
17 apr. 2015 11:24:13

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.

Matt Royal Matt Royal
18 apr. 2015 11:24:24

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)

Matt Royal Matt Royal
18 apr. 2015 11:39:01

@MattRoyal ai dreptate, această abordare nu mai funcționează. Te rog să ajustezi răspunsul tău în consecință. Este răspunsul acceptat, oamenii vor încerca acest lucru și nu va funcționa pentru ei.

panepeter panepeter
8 iul. 2020 09:37:59
Arată celelalte 4 comentarii
0

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.

28 dec. 2018 21:06:01
0

Î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 );
27 mai 2014 20:30:55
0

Folosește filemtime pentru a versiona după modificarea fișierului. Dezînregistrează și încarcă stilul.

  1. 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' />

  1. 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' );
27 nov. 2020 16:03:00
1

Cred că dacă folosești editorul de teme Wordpress pentru a edita fișierul de stiluri al temei tale copil, acesta adaugă automat un nou număr de versiune de fiecare dată când salvezi fișierul.

21 mai 2014 20:44:53
Comentarii

Corect, dar eu nu folosesc editorul WP pentru a lucra pe fișierele mele de stiluri..

drake035 drake035
26 mai 2014 21:23:51