Zuweisen einer Versionsnummer zum Hauptstylesheet eines untergeordneten Themas

10

In header.php möchte ich dem Stylesheet eine Versionsnummer zuweisen, damit der Browser gezwungen ist, diese zu aktualisieren. Wenn Sie jedoch mit einem untergeordneten Thema arbeiten, wird dessen Stylesheet nicht explizit aufgerufen, sondern WordPress sucht es automatisch. Wie oder wo kann man dem Stylesheet des untergeordneten Themas eine Versionsnummer zuweisen?

drake035
quelle

Antworten:

4

Sie können die Version im Stylesheet für untergeordnete Themen selbst aktualisieren ...

/*
 Theme Name:   Twenty Fourteen Child
 Theme URI:    http://example.com/twenty-fourteen-child/
 Description:  Twenty Fourteen Child Theme
 Author:       John Doe
 Author URI:   http://example.com
 Template:     twentyfourteen
 Version:      1.1.2 <---- Update here
*/
Matt Royal
quelle
Sind Sie sicher, dass dadurch zwangsläufig jedes zwischengespeicherte Stylesheet gelöscht und das Laden der neuen Version erzwungen wird, genau wie beim Hinzufügen einer Versionsnummer in header.php?
Drake035
Ja, wenn Sie sich die Seitenquelle ansehen, wird die Abfragezeichenfolge aktualisiert, wenn Sie die Versionsnummer in Ihrem untergeordneten Design ändern. Style.css
Matt Royal
7
Funktioniert das noch Für mich macht das Ändern der Version in style.css des untergeordneten Themas keinen Unterschied - die Abfragezeichenfolge style.css im Kopf wird weiterhin als Wordpress-Versionsnummer ausgegeben (in diesem Fall 4.1.1).
Tim Malone
2
Es hängt davon ab, wie Ihr Thema eingerichtet wurde. Schauen Sie auf der Seite @kraftner Antwort nach. Wenn sich Ihr Thema abmeldet und die Datei dann erneut registriert, funktioniert dies nicht.
Matt Royal
4
Hat einen anderen Blick darauf geworfen und die Standardversion basiert jetzt auf der WP-Version. Diese Antwort ist also nicht mehr gültig! ( github.com/WordPress/WordPress/blob/… )
Matt Royal
13

Ich denke, der beste Weg, dies zu tun, besteht darin, das untergeordnete Design-Stylesheet (style.css) leer zu lassen und nur die erforderlichen Kommentare (wie Themenname, Beschreibung usw., damit WordPress Ihr Thema erkennen kann) und dann eine weitere CSS-Datei in Ihrem zu erstellen. Themenname-Ordner / css / main.css

Danach können Sie auf function.php jedes Mal, wenn Sie Ihre Datei ändern, eine neue "Version" haben:

function my_scripts_and_styles(){

$cache_buster = date("YmdHi", filemtime( get_stylesheet_directory() . '/css/main.css'));
wp_enqueue_style( 'main', get_stylesheet_directory_uri() . '/css/main.css', array(), $cache_buster, 'all' );

}

add_action( 'wp_enqueue_scripts', 'my_scripts_and_styles', 1);

Die Logik:

Jedes Mal, wenn Sie die Datei speichern, wird die geänderte Zeit der Datei geändert. Die neue Uhrzeit wird an die Datumsfunktion übergeben, um die Uhrzeit (die Dateizeit gibt eine Ganzzahl zurück, die die Uhrzeit darstellt) in das Datumsformat zu konvertieren, um daraus eine Zeichenfolge im gewünschten Format zu machen. In unserem Beispiel wird die Zeit mit einer Genauigkeit von Minuten formatiert. Sie können es ändern, um sogar die Sekunde zu verfolgen, dh. "YmdHis"Danach wird die neue geänderte Zeit der Datei als neue Version an übergeben wp_enqueue_style.

Referenz :

http://www.php.net/filemtime

http://php.net/manual/en/function.date.php

Laxmana
quelle
2
Ich bevorzuge die Theme-Version als Cache-Buster. Wenn Sie verwenden, erhalten $cache_buster = wp_get_theme()->get('Version')Sie die im Kommentarblock angegebene Version in style.css. Siehe codex.wordpress.org/Function_Reference/wp_get_theme als Referenz.
Marcel Stör
Nizza wusste nicht, dass es diese Funktion gibt. Aber auch hier müssen Sie die Version jedes Mal manuell ändern, wenn Sie eine Änderung vornehmen. Dies kann insbesondere bei der Entwicklung frustriert sein (aufgrund von Cache-Problemen). Sie sind auch verpflichtet, in style.css zu codieren, selbst wenn Sie Ihre main.css-Datei dort importieren, was ich übrigens nicht für einen guten Ansatz halte. Wenn Sie in SASS codieren, kann es außerdem schwierig sein, ihn zu warten. Schließlich denke ich, dass es schneller ist, die Dateizeit zu überprüfen, als die Datei zu öffnen, die ersten Kommentare zu lesen und die Version zu finden (ich bin nicht sicher, ob das so wp_get_theme()->get('Version')funktioniert).
Laxmana
Stimmt, aber auf der positiven Seite erhalten Sie eine bessere Kontrolle über Ihre Stile. Sie können das CSS schrittweise aktualisieren und wenn Sie mit dem Ergebnis zufrieden sind, können Sie die Version endgültig anstoßen und "freigeben".
Marcel Stör
1
Geben Sie es an Benutzer weiter, die zur Website zurückkehren. Neue Benutzer sehen frisch, was auch immer in der Datei ist.
Ryanrain
10

Sie müssen lediglich den Hauptstil per Handle abmelden und sich dann mit Ihrer Versionsnummer neu registrieren. In diesem Fall ist der Griff style-css.

Sie können das Handle bestimmen, das Sie verwenden müssen, indem Sie auf den Link zum gerenderten Stylesheet schauen:

<link rel='stylesheet' id='style-css-css'  href='http://site-url/wp-content/themes/child-theme/style.css?ver=4.6.1' type='text/css' media='all' />

Hier ist die ID, style-css-csswas bedeutet, dass unser Griff iststyle-css

Fügen Sie dies in die function.php Ihres Kinderthemas ein:

function wpse_145141_change_style_version(){
    // First de-register the main stylesheet
    wp_deregister_style( 'style-css' );
    // Then add it again, using your custom version number
    wp_register_style( 'style-css', get_stylesheet_uri(), array(), "VERSION_NUMBER" );
    //finally enqueue it again
    wp_enqueue_style( 'style-css');
}

add_action( 'wp_enqueue_scripts', 'wpse_145141_change_style_version');
Kraftner
quelle
1

Die aktuelle Top-Antwort ist themenabhängig, da der Themenentwickler diese Versionsnummer des untergeordneten Themas in eine Variable umwandeln und sie dann beim Einreihen in die untergeordnete Datei style.css anhängen muss. Ich habe dies bei einigen Themen gesehen, aber nicht bei vielen. Das Folgende funktioniert mit jedem Thema, das die untergeordneten Stile in functions.php registriert - funktioniert nicht mit der alten @ import-Regel, die ich nicht mehr viel gesehen habe.

In functions.php des untergeordneten Themas sollten Sie etwas Ähnliches haben:

// enqueue the child theme stylesheet

function wp_schools_enqueue_scripts() {
  wp_register_style( 'childstyle', get_stylesheet_directory_uri() . '/style.css'  );
  wp_enqueue_style( 'childstyle' );
}
add_action( 'wp_enqueue_scripts', 'wp_schools_enqueue_scripts', 11);

Wenn Sie es wie folgt ändern, wird bei jedem Speichern der Datei ein Zeitstempel als Versionsnummer angehängt, sodass jede Änderung des Stylesheets den lokalen Cache durchläuft:

 // enqueue the child theme stylesheet

 function wp_schools_enqueue_scripts() {
   wp_register_style( 
     'childstyle', 
     get_stylesheet_directory_uri() . '/style.css', 
     array(), 
     filemtime( get_stylesheet_directory() . '/style.css' ) 
   );
   wp_enqueue_style( 'childstyle' );
 }
 add_action( 'wp_enqueue_scripts', 'wp_schools_enqueue_scripts', 11);

Hoffe das hilft jemandem. Ich verwende dies auf jeder Site, die ich aktiv verwalte.

Jeff Travilla
quelle
0

Ich glaube, wenn Sie den Stylesheet Ihres untergeordneten Themas mit dem Wordpress-Designeditor bearbeiten, wird bei jedem Speichern der Datei automatisch eine neue Versionsnummer angehängt.

Selbstverwaltung
quelle
1
Richtig, aber ich benutze den WP-Editor nicht, um an meinen Stylesheets zu arbeiten.
drake035
0

Anstatt die Standard-style.css zu verwenden, verwende ich normalerweise wp_enqueue_style in der functions.php des untergeordneten Themas oder einer anderen enthaltenen PHP-Datei. Sie hätten also immer noch die Datei style.css im untergeordneten Thema mit allen Details zum untergeordneten Thema, aber dann können Sie im untergeordneten Thema eine separate CSS-Datei für das eigentliche Design des untergeordneten Themas haben (ich füge dies normalerweise in ein Assets / CSS ein Verzeichnis innerhalb des untergeordneten Themas). Auf diese Weise können Sie auch die CSS-Version mit dem 4. Parameter festlegen. Zum Beispiel:

function theme_name_child_scripts() {
    wp_enqueue_style( 'style-name', get_stylesheet_directory_uri() . '/assets/css/child-style.css', array(), '1.0.0', 'screen');
}

add_action( 'wp_enqueue_scripts', 'theme_name_child_scripts' );

Sie können der Aktion eine Priorität hinzufügen, wenn sie nicht in der richtigen Reihenfolge geladen wird, oder mit dem Abhängigkeitsparameter in wp_enqueue_style oben arbeiten:

add_action( 'wp_enqueue_scripts', 'theme_name_child_scripts', 20 );
Björn
quelle