Wie man ein untergeordnetes Thema zwischenspeichert. Style.css

8

Meine Frage mag verschiedene Aspekte haben, aber ich finde es im Wesentlichen einfach: Wie stellen Sie sicher, dass Änderungen an einem untergeordneten Thema style.cssordnungsgemäß über Caches verteilt werden?

Ich habe an einigen Stellen gelesen, dass WP die WP-Version platzieren sollte / würde, nnnwenn die Ressource als abgerufen wird http://host/wp-content/themes/theme-child/style.css?ver=nnn. In meiner Installation unter http://frightanic.com/ sehe ich, dass stattdessen die übergeordnete Designversion verwendet wird. Ich habe W3 Total Cache und ein CDN eingerichtet, aber selbst wenn sie deaktiviert sind, wird eine Ressource wie wp-content/themes/frightanic/style.css?ver=3.0.7angefordert. 3.0.7ist die Version des übergeordneten Decode- Themas.

Aber wie auch immer, wenn ich mein untergeordnetes Thema CSS aktualisiere, ohne gleichzeitig WP oder das übergeordnete Thema zu aktualisieren, wie kann ich es dann aus den Caches entfernen?

Marcel Stör
quelle

Antworten:

11

@ dalbaebs Kommentar führte schließlich zu aufschlussreichen Diskussionen und einer praktikablen Lösung. Vielen Dank!

Ich glaube, der Grund, warum mein untergeordnetes Thema CSS mit geladen wurde, 'ver=<parent-theme-version>war, dass ich den WP-Codex zu untergeordneten Themen 1: 1 befolgt hatte . Mein functions.phpenthielt dies:

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

Der Code, den ich letztendlich verwendet habe, wurde zuerst in https://wordpress.stackexchange.com/a/182023/30783 erwähnt, aber zahlreiche Websites im Internet haben ihn kopiert (ohne entsprechende Gutschrift).

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

Update 2017-01-26

Das aktuelle WP Theme-Handbuch enthält jetzt einen korrekten Fix: https://developer.wordpress.org/themes/advanced-topics/child-themes/#3-enqueue-stylesheet

Marcel Stör
quelle
Nett! Wenn Sie Ihre eigene Frage beantwortet haben, ist es in Ordnung, Ihre eigene Antwort als Lösung zu akzeptieren.
Phatskat
Ich weiß, aber Sie müssen auf 2d warten, bis diese Funktion verfügbar ist.
Marcel Stör
3
Das aktuelle WP Theme Handbuch enthält jetzt eine korrekte Korrektur: developer.wordpress.org/themes/advanced-topics/child-themes/…
Marcel Stör
1

Dies funktioniert gut, wenn Sie direkt in Ihre header.php einfügen und den Cache jedes Mal aktualisieren, wenn Sie Ihre CSS-Datei aktualisieren:

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

Es wird angezeigt: style.css? 324932684 wobei die Nummer der Zeitpunkt ist, zu dem die Datei bearbeitet wurde

jcdarocha
quelle
1
Stile sollten wp_enqueue_styleanstelle von Hardcodierung in die Warteschlange gestellt werden .
Bravokeyl
0

Dies kann auch funktionieren. Verwenden der PHP-Rand-Funktion:

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
quelle
1
Dies ist keine gute Idee, da diese Assets vom Browser zwischengespeichert werden sollen, solange sie sich nicht ändern.
Marcel Stör