Como armazenar em cache um tema filho style.css

8

Pode haver vários aspectos na minha pergunta, mas, em essência, é fácil: como garantir que as alterações em um tema filho style.csssejam propagadas adequadamente pelos caches?

Li em alguns lugares que o WP deveria / estaria colocando a versão do WP nnnquando o recurso é buscado como http://host/wp-content/themes/theme-child/style.css?ver=nnn. Na minha instalação em http://frightanic.com/ , vejo que a versão do tema pai é usada. Eu tenho o W3 Total Cache e uma CDN, mas mesmo se eles estiverem desabilitados, um recurso como wp-content/themes/frightanic/style.css?ver=3.0.7é solicitado. 3.0.7é a versão do tema pai da decodificação .

Seja como for, se eu atualizar o CSS do meu tema filho sem atualizar o WP ou o tema pai ao mesmo tempo, como removê-lo dos caches?

Marcel Stör
fonte

Respostas:

11

O comentário de @ dalbaeb acabou por levar a discussões perspicazes e a uma solução viável. Muito obrigado!

Acredito que a razão pela qual o CSS do meu tema filho foi carregado usando 'ver=<parent-theme-version>foi porque eu segui o WP Codex nos temas filhos 1: 1. Meu functions.phpcontinha isso:

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

O código que acabei usando foi mencionado pela primeira vez em https://wordpress.stackexchange.com/a/182023/30783, mas vários sites na Internet o copiaram (sem dar o devido crédito).

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

Atualização 2017-01-26

O manual atual do Tema WP agora contém uma correção adequada: https://developer.wordpress.org/themes/advanced-topics/child-themes/#3-enqueue-stylesheet

Marcel Stör
fonte
Agradável! Se você respondeu sua própria pergunta, não há problema em aceitar sua própria resposta como a solução.
precisa saber é o seguinte
Eu sei, mas você tem que esperar 2d até que essa função esteja disponível.
Marcel Stör
3
O manual atual do Tema WP agora contém uma correção adequada: developer.wordpress.org/themes/advanced-topics/child-themes/…
Marcel Stör
1

Isso funciona bem quando você adiciona diretamente no seu header.php e atualiza o cache sempre que você atualiza seu arquivo css:

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

Ele exibe: style.css? 324932684 em que o número é a hora em que o arquivo foi editado

jcdarocha
fonte
1
Os estilos devem ser enfileirados usando em wp_enqueue_stylevez de codificação.
bravokeyl
0

Isso pode funcionar também. Usando a função 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
fonte
1
Não é uma boa ideia, pois você deseja que esses recursos possam ser alterados pelo navegador enquanto não forem alterados.
Marcel Stör 22/12