子テーマのメインスタイルシートのバージョン番号の原因


11

header.phpでは、ブラウザーが強制的に更新するように、バージョン番号をスタイルシートに関連付けます。ただし、子テーマを操作する場合、そのスタイルシートは明示的に呼び出されず、WordPressが自動的にシークします。では、どのように、またはどこでバージョン番号を子テーマのスタイルシートに帰属させるのでしょうか?

回答:


5

子テーマのスタイルシート自体でバージョンを更新できます...

/*
 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
*/

header.phpにバージョン番号を追加するときと同じように、キャッシュされたスタイルシートを必ずフラッシュし、新しいバージョンを強制的にロードすることを確信していますか?
drake035 2014年

はい、ページのソースを見ると、子テーマstyle.css内のバージョン番号を変更すると、クエリ文字列が更新されます
Matt Royal

7
これはまだ機能しますか?私にとって、子テーマのstyle.cssのバージョンを変更しても違いはありません。headのstyle.cssクエリ文字列は、Wordpressのバージョン番号(この場合は4.1.1)のままです。
Tim Malone

2
テーマの設定方法によって異なります。ページ@kraftnerの回答をご覧ください。テーマの登録を解除してからファイルを再登録する場合、これは機能しません。
マットロイヤル

4
別の外観を採用し、デフォルトのバージョンはWPバージョンに基づいています。したがって、この回答は無効になりました。(github.com/WordPress/WordPress/blob/...
マット・ロイヤル・

13

これを行う最良の方法は、子テーマのスタイルシート(style.css)を必要なコメント(テーマ名、説明などのように、ワードプレスがテーマを認識できるようにする)だけを空にして、別のcssファイルを作成することですテーマ名フォルダ/css/main.css

その後function.phpで、ファイルを変更するたびに新しい「バージョン」を持つことができます。

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

ロジック:

ファイルを保存するたびに、ファイルの変更時刻が変更されます。新しい時刻が日付関数に渡され、時刻(filemtimeは時刻を表す整数を返す)を日付形式に変換して、希望する形式の文字列にします。この例では、時間は分単位の精度でフォーマットされています。秒を追跡するように変更することもできます"YmdHis"。その後、ファイルの新しい変更時刻が新しいバージョンとしてに渡されますwp_enqueue_style

参照 :

http://www.php.net/filemtime

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


2
私はキャッシュバスターとしてテーマバージョンを使用することを好みます。を使用$cache_buster = wp_get_theme()->get('Version')すると、のコメントブロックで指定されたバージョンが取得されますstyle.css。参照としてcodex.wordpress.org/Function_Reference/wp_get_themeを参照してください。
MarcelStör

ニースはこの関数の存在を知りませんでした。ただし、変更を行うたびにバージョンを手動で変更する必要があり、特に開発時に(所与のキャッシュの問題)イライラする可能性があります。また、main.cssファイルをそこにインポートした場合でも、style.cssでコードを作成する義務があります。さらに、SASSでコーディングすると、保守が困難になる可能性があります。最後に、ファイルを開いて最初のコメントを読んでバージョンを見つけるよりも、ファイルの時間をチェックする方が速いと思います(wp_get_theme()->get('Version')そのように機能するかどうかはわかりません)。
Laxmana

確かに、しかしポジティブな面では、スタイルをよりよくコントロールできます。CSSを段階的に更新し、結果に満足したら、最終的にバージョンをバンプして「リリース」できます。
MarcelStör16年

1
サイトに戻ってきたユーザーに「リリース」します。新しいユーザーは、ファイルに何があるかを新鮮に見ます。
ライアンレイン2017

10

あなたがする必要があるのは、ハンドルによってメインスタイルを登録解除し、それからあなたのバージョン番号で再登録することです。この場合、ハンドルはstyle-cssです。

レンダリングされたスタイルシートのリンクを見て、使用する必要があるハンドルを決定できます。

<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' />

ここでidはstyle-css-css、ハンドルがstyle-css

これをあなたの子テーマのfunction.phpに入れてください:

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

1

現在の上位の回答はテーマに依存しています。テーマ開発者は、子テーマのバージョン番号を変数にしてから、エンキューするときにそれを子style.cssに追加する必要があるためです。私はこれをいくつかのテーマで見ましたが、多くはありません。以下は、子スタイルをfunctions.phpに登録するすべてのテーマで機能します-これ以上見たことのない古い@importルールでは機能しません。

子テーマのfunctions.phpには、次のようなものが必要です。

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

次のように変更すると、ファイルが保存されるたびにバージョン番号としてタイムスタンプが追加され、スタイルシートの変更ごとにローカルキャッシュを無効にすることができます。

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

これが誰かを助けることを願っています。私は積極的に管理しているすべてのサイトでこれを使用しています。


0

Wordpressテーマエディターを使用して子テーマのスタイルシートを編集すると、ファイルを保存するたびに新しいバージョン番号が自動的に追加されると思います。


1
右が、私は私のスタイルシートに仕事にWPエディタを使用していない...
drake035

0

代わりに、デフォルトのstyle.cssを使用して、私は一般的に使用wp_enqueue_style子テーマのfunctions.phpのまたは別の付属のphpファイルに。したがって、すべての子テーマの詳細を含むstyle.cssが子テーマに含まれますが、実際の子テーマのスタイル設定のために子テーマに個別のcssファイルを含めることができます(通常、これはアセット/ cssに配置します)子テーマ内のディレクトリ)。これにより、4番目のパラメーターでCSSバージョンを設定することもできます。例えば:

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

アクションが正しい順序で読み込まれていない場合や、上記のwp_enqueue_styleの依存関係パラメーターを使用している場合は、アクションに優先度を追加できます。

add_action( 'wp_enqueue_scripts', 'theme_name_child_scripts', 20 );
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.