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?


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


¡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


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' );

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.