Cómo cachear busto un tema hijo style.css

8

Puede haber varios aspectos en mi pregunta, pero en esencia creo que es fácil: ¿cómo se asegura de que los cambios en un tema secundario style.cssse propaguen correctamente en las cachés?

Leí en algunos lugares que WP debería / estaría colocando la versión de WP nnncuando el recurso se recupera como http://host/wp-content/themes/theme-child/style.css?ver=nnn. En mi instalación en http://frightanic.com/ veo que en su lugar se usa la versión del tema principal . Tengo W3 Total Cache y un CDN en su lugar, pero incluso si están deshabilitados, wp-content/themes/frightanic/style.css?ver=3.0.7se solicita un recurso como . 3.0.7es la versión del tema principal Decode .

Pero sea como sea, si actualizo el CSS de mi tema secundario sin actualizar WP o el tema principal al mismo tiempo, ¿cómo puedo eliminarlo de los cachés?

Marcel Stör
fuente

Respuestas:

11

El comentario de @dalbaeb eventualmente condujo a discusiones perspicaces y una solución factible. ¡Muchas gracias!

Creo que la razón por la que se cargó el CSS de mi tema secundario 'ver=<parent-theme-version>fue porque seguí el WP Codex en los temas secundarios 1: 1. Mi functions.phpcontenido esto:

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

El código que terminé usando se mencionó por primera vez en https://wordpress.stackexchange.com/a/182023/30783, pero numerosos sitios en Internet lo copiaron (sin dar el crédito adecuado).

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

Actualizar 2017-01-26

El manual actual de WP Theme ahora contiene una solución adecuada :: https://developer.wordpress.org/themes/advanced-topics/child-themes/#3-enqueue-stylesheet

Marcel Stör
fuente
¡Agradable! Si respondió su propia pregunta, está bien aceptar su propia respuesta como la solución.
Phatskat
Lo sé, pero tienes que esperar 2d hasta que esa función esté disponible.
Marcel Stör
3
El manual actual de WP Theme ahora contiene una solución adecuada: developer.wordpress.org/themes/advanced-topics/child-themes/…
Marcel Stör el
1

Esto funciona bien cuando agrega directamente en su header.php y actualiza el caché cada vez que actualiza su archivo css:

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

Muestra: style.css? 324932684 donde el número es la hora en que se editó el archivo

jcdarocha
fuente
1
Los estilos deben ponerse en cola usando en wp_enqueue_stylelugar de codificación rígida.
bravokeyl
0

Esto puede funcionar también. Usando la función 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
fuente
1
Esa no es una buena idea, ya que desea que el navegador pueda almacenar en caché esos activos mientras no cambien.
Marcel Stör