Cum să forțezi actualizarea cache-ului pentru fișierul style.css al unui child theme

2 ian. 2016, 01:35:51
Vizualizări: 14.5K
Voturi: 13

Întrebarea mea are mai multe aspecte, dar în esență este simplă: cum te asiguri că modificările aduse fișierului style.css al unui child theme sunt propagate corect prin cache-uri?

Am citit în mai multe locuri că WordPress ar trebui să adauge versiunea WP în nnn atunci când resursa este încărcată, sub forma http://host/wp-content/themes/theme-child/style.css?ver=nnn. În instalarea mea de la http://frightanic.com/ observ că este folosită versiunea temei părinte. Am instalat W3 Total Cache și un CDN, dar chiar și dacă sunt dezactivate, o resursă precum wp-content/themes/frightanic/style.css?ver=3.0.7 este solicitată. 3.0.7 este versiunea temei părinte Decode.

Dar oricum ar fi, dacă actualizez CSS-ul child theme-ului fără a actualiza WordPress sau tema părinte în același timp, cum pot forța invalidarea cache-ului?

1
Comentarii

http://wordpress.stackexchange.com/a/147215/8105

montrealist montrealist
2 ian. 2016 01:46:42
Toate răspunsurile la întrebare 4
4
12

Comentariul lui @dalbaeb a dus în cele din urmă la discuții pertinente și la o soluție fezabilă. Mulțumesc mult!

Cred că motivul pentru care CSS-ul temei mele copil era încărcat folosind 'ver=<parent-theme-version> a fost pentru că am urmat exact WP Codex pe temele copil. Fișierul meu functions.php conținea asta:

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

Codul pe care l-am folosit în final a fost menționat prima dată în https://wordpress.stackexchange.com/a/182023/30783, dar numeroase site-uri de pe Internet l-au copiat (fără a oferi creditul corespunzător).

// Asigurându-te că tema copil are o versiune independentă și poate forța reîncărcarea cache-ului: https://wordpress.stackexchange.com/a/182023/30783
// Filtrează get_stylesheet_uri() pentru a returna fișierul CSS al temei părinte
add_filter('stylesheet_uri', 'use_parent_theme_stylesheet');
// Încarcă scripturile și stilurile acestei teme (după tema părinte)
add_action('wp_enqueue_scripts', 'my_theme_styles', 20);

function use_parent_theme_stylesheet()
{
    // Folosește fișierul CSS al temei părinte
    return get_template_directory_uri() . '/style.css';
}

function my_theme_styles()
{
    $themeVersion = wp_get_theme()->get('Version');

    // Încarcă fișierul nostru style.css cu propria noastră versiune
    wp_enqueue_style('child-theme-style', get_stylesheet_directory_uri() . '/style.css',
        array(), $themeVersion);
}

Actualizare 2017-01-26

Manualul actual de teme WP conține acum o soluție corectă: https://developer.wordpress.org/themes/advanced-topics/child-themes/#3-enqueue-stylesheet

2 ian. 2016 16:51:50
Comentarii

Super! Dacă ți-ai răspuns singur la întrebare, este OK să îți accepti propriul răspuns ca soluție.

phatskat phatskat
4 ian. 2016 17:21:52

Știu, dar trebuie să aștepți 2 zile până când această funcție devine disponibilă.

Marcel Stör Marcel Stör
4 ian. 2016 18:25:11

Actualul manual pentru teme WP conține acum o soluție corectă: https://developer.wordpress.org/themes/advanced-topics/child-themes/#3-enqueue-stylesheet

Marcel Stör Marcel Stör
26 ian. 2017 00:02:58

@MarcelStör Poți descrie unde exact pe pagina la care ai dat link se menționează `cache busting`, pentru că nu l-am găsit

Eric Hepperle - CodeSlayer2010 Eric Hepperle - CodeSlayer2010
27 aug. 2024 19:51:17
1

Acest lucru funcționează bine atunci când adăugați direct în fișierul header.php și reîmprospătați cache-ul de fiecare dată când actualizați fișierul CSS:

<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); echo '?' . filemtime( get_stylesheet_directory() . '/style.css'); ?>" type="text/css" media="screen" />

Se va afișa: style.css?324932684 unde numărul reprezintă data și ora la care fișierul a fost modificat

30 sept. 2016 20:23:04
Comentarii

Stilurile ar trebui încărcate folosind wp_enqueue_style în loc să fie hardcodate.

bravokeyl bravokeyl
30 sept. 2016 20:29:52
1

Aceasta poate funcționa de asemenea. Folosind funcția php rand:

function theme_enqueue_styles() {

    $parent_style = 'parent-style';

    wp_enqueue_style( $parent_style, get_template_directory_uri() . '/style.css' );
    wp_enqueue_style( 'child-style',
        get_stylesheet_directory_uri() . '/style.css?'.rand(),
        array( $parent_style )
    );
}
add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
22 dec. 2016 14:08:42
Comentarii

Aceasta nu este o idee bună, deoarece doriți ca acele resurse să poată fi stocate în cache de browser pentru cât timp nu se modifică.

Marcel Stör Marcel Stör
22 dec. 2016 17:44:27
0

WordPress acum acoperă acest lucru printr-o funcție.

add_action( 'wp_enqueue_scripts', 'my_theme_enqueue_styles' );
function my_theme_enqueue_styles() {
    wp_enqueue_style( 'child-style', get_stylesheet_uri(),
        array( 'parenthandle' ), 
        wp_get_theme()->get('Version') // aceasta funcționează doar dacă aveți Version în header-ul stilului
    );
}

Folosește Version: 1.0.0 în fișierul tău de stiluri actual Încărcarea fișierului de stiluri cu revizie

24 aug. 2020 13:12:42