Comment mettre en cache un thème enfant style.css

8

Il peut y avoir plusieurs aspects à ma question, mais je pense que c'est essentiellement simple: comment vous assurer que les modifications apportées à un thème enfant style.csssont correctement propagées dans les caches?

J'ai lu à quelques endroits que WP devrait / devrait placer la version WP nnnlorsque la ressource est récupérée en tant que http://host/wp-content/themes/theme-child/style.css?ver=nnn. Dans mon installation sur http://frightanic.com/ je vois que la version du thème parent est utilisée à la place. J'ai W3 Total Cache et un CDN en place, mais même s'ils sont désactivés, une ressource comme wp-content/themes/frightanic/style.css?ver=3.0.7est demandée. 3.0.7est la version du thème parent Decode .

Quoi qu'il en soit, si je mets à jour mon CSS de thème enfant sans mettre à jour WP ou le thème parent en même temps, comment puis-je le supprimer des caches?

Marcel Stör
la source

Réponses:

11

Le commentaire de @ dalbaeb a finalement conduit à des discussions perspicaces et à une solution réalisable. Merci beaucoup!

Je crois que la raison pour laquelle mon CSS de thème enfant a été chargé 'ver=<parent-theme-version>était parce que j'avais suivi le WP Codex sur les thèmes enfants 1: 1. Ma functions.phpcontenait ceci:

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

Le code que j'ai fini par utiliser a été mentionné pour la première fois dans https://wordpress.stackexchange.com/a/182023/30783, mais de nombreux sites sur Internet l'ont copié-collé (sans donner le crédit approprié).

// 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);
}

Mise à jour 2017-01-26

Le manuel WP Theme actuel contient désormais un correctif approprié :: https://developer.wordpress.org/themes/advanced-topics/child-themes/#3-enqueue-stylesheet

Marcel Stör
la source
Agréable! Si vous avez répondu à votre propre question, vous pouvez accepter votre propre réponse comme solution.
phatskat
Je sais, mais vous devez attendre 2 jours jusqu'à ce que cette fonction soit disponible.
Marcel Stör
3
Le manuel WP Theme actuel contient désormais un correctif approprié: developer.wordpress.org/themes/advanced-topics/child-themes/…
Marcel Stör
1

Cela fonctionne bien lorsque vous ajoutez directement dans votre header.php et actualisez le cache à chaque fois que vous mettez à jour votre fichier css:

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

Il affiche: style.css? 324932684 où le nombre est l'heure à laquelle le fichier a été modifié

jcdarocha
la source
1
Les styles doivent être mis en file d'attente à l'aide wp_enqueue_styled'un codage en dur.
bravokeyl
0

Cela peut également fonctionner. Utilisation de la fonction 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' );
Joshua Coolman
la source
1
Ce n'est pas une bonne idée car vous voulez que ces actifs soient traçables par le navigateur tant qu'ils ne changent pas.
Marcel Stör