Come memorizzare nella cache il busting di un tema child style.css


8

Potrebbero esserci diversi aspetti della mia domanda, ma ritengo in sostanza che sia facile: come si fa a garantire che le modifiche a un tema figlio style.cssvengano propagate correttamente nelle cache?

Ho letto in alcuni punti che WP dovrebbe / avrebbe inserito la versione di WP nnnquando la risorsa viene recuperata come http://host/wp-content/themes/theme-child/style.css?ver=nnn. Nella mia installazione su http://frightanic.com/ vedo che viene utilizzata la versione del tema principale . Ho W3 Total Cache e un CDN in atto ma anche se sono disabilitati wp-content/themes/frightanic/style.css?ver=3.0.7viene richiesta una risorsa come . 3.0.7è la versione del tema principale Decode .

Comunque sia, se aggiorno il CSS del mio tema figlio senza aggiornare contemporaneamente WP o il tema genitore, come posso eliminarlo dalla cache?


Risposte:


11

Il commento di @ dalbaeb alla fine porta a discussioni approfondite e una soluzione fattibile. Molte grazie!

Credo che il motivo per cui è stato caricato il CSS del mio tema figlio 'ver=<parent-theme-version>sia perché avevo seguito il codice WP sui temi figlio 1: 1. Il mio functions.phpconteneva questo:

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

Il codice che ho finito per usare è stato menzionato per la prima volta in https://wordpress.stackexchange.com/a/182023/30783 ma numerosi siti su Internet lo hanno copiato (senza dare credito adeguato).

// Making sure your child theme has an independent version and can bust caches: https://wordpress.stackexchange.com/a/182023/30783
// Filter get_stylesheet_uri() to return the parent theme's stylesheet
add_filter('stylesheet_uri', 'use_parent_theme_stylesheet');
// Enqueue this theme's scripts and styles (after parent theme)
add_action('wp_enqueue_scripts', 'my_theme_styles', 20);

function use_parent_theme_stylesheet()
{
    // Use the parent theme's stylesheet
    return get_template_directory_uri() . '/style.css';
}

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

    // Enqueue our style.css with our own version
    wp_enqueue_style('child-theme-style', get_stylesheet_directory_uri() . '/style.css',
        array(), $themeVersion);
}

Aggiornamento 26-01-2017

L'attuale manuale del tema WP ora contiene una soluzione corretta: https://developer.wordpress.org/themes/advanced-topics/child-themes/#3-enqueue-stylesheet


Bello! Se hai risposto alla tua domanda, è OK accettare la tua risposta come soluzione.
Phatskat,

Lo so, ma devi aspettare 2d fino a quando quella funzione è disponibile.
Marcel Stör

3
L'attuale manuale del tema WP ora contiene una soluzione corretta: developer.wordpress.org/themes/advanced-topics/child-themes/…
Marcel Stör

1

Funziona bene quando aggiungi direttamente nel tuo header.php e aggiorni la cache ogni volta che aggiorni il tuo file css:

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

Viene visualizzato: style.css? 324932684 dove il numero è l'ora in cui il file è stato modificato


1
Gli stili devono essere accodati utilizzando wp_enqueue_styleinvece della codifica rigida.
bravokeyl,

0

Anche questo potrebbe funzionare. Utilizzando la funzione 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' );

1
Non è una buona idea poiché vuoi che tali risorse siano memorizzabili dal browser fino a quando non cambiano.
Marcel Stör,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.