web-dev-qa-db-ja.com

rtl.cssのキャッシュとバージョン管理

私はfilemtime()を使用して、カスタムWordPressテーマの異なる.cssファイルと.jsファイルのバージョン番号を追加しています。

私は ここで説明されている受け入れられた答え をガイドラインとして使いました。しかし、私はwp_retister_style()wp_register_script()関数をそれぞれ私の.css.jsファイルを登録するために使い、そしてwp_enqueue_style()wp_enqueue_script()を通してそれらをロードします。例として、私はこのようにsigle.cssファイルを登録しています。

wp_register_style('xyz_single', get_template_directory_uri() . '/css/single.css', false, filemtime(get_template_directory() . '/css/single.css'));

上記の関数の4番目のパラメータは、スタイルシートに?ver = nnnnnnnn を追加します。最終的な出力はsingle.css?ver=nnnnnnnnのようになります。ここで nnnnnnnn は変更されたファイルのタイムスタンプを表す番号です。テーマを変更したときに確実に再ロードするようにして、キャッシュの問題を解決してください。

さて、私の質問に。

私の得意なテーマでは、rtl.cssを使用します。これはwp_head()が呼び出されると自動的に読み込まれます。では、どうやってバージョン番号を含めるためにrtl.cssを追加するのですか?


詳しくは

header.phpでは、style.cssを次のようにロードしています。

<link href="<?php echo get_stylesheet_uri() . '?ver=' . filemtime(get_stylesheet_directory() . '/style.css'); ?>" rel="stylesheet" type="text/css" />

上記のようにwp_register_style()を使用し、その後にwp_enqueue_style()を使用して、他のすべてのスタイルシートをロードしています。これが一例です。

wp_register_style('xyz_single', get_template_directory_uri() . '/css/single.css', false, filemtime(get_template_directory() . '/css/single.css'));

wp_enqueue_style('xyz-single');

しかし、header.phpwp_head()を呼び出すと、rtrt.cssが自動的に読み込まれます。 wp_head()がどのようにrtl.cssをロードするのか--- この素晴らしい記事を読む してください。それで私の質問、もし自動的に呼ばれたらどうやってrtl.cssにバージョン番号を追加することができますか?

7
Greeso

あなたはWordPressの自動方法を使ってrtl.cssを読み込んでいます。つまり、rtl.cssテーマフォルダ内のWordPressが現在の言語と現在の方向を示している場合は自動的にロードされます(質問にこの情報を追加する必要があります)。ファイル)。このプロセスでは、ロケールスタイルシートのURLを変更するために使用できるlocale_stylesheet_uriを定義しているので、versionパラメータを追加できます。

add_filter( 'locale_stylesheet_uri', function ($localized_stylesheet_uri) {
    $time_ver = filemtime( get_stylesheet_directory() . '/rtl.css' );
    return add_query_arg( array('ver' => $time_ver), $localized_stylesheet_uri );
});

依存関係も処理する必要がある場合は、他のCSSファイルと同じようにrlt.cssファイルにwp_enqueue_styleをロードする必要があります。 "auto"の方法で依存関係を処理する方法はありません。

6
cybmeta

あなたが指摘した記事に基づいて、それは2つの簡単な選択肢があるように思えます

  1. 追加されるアクションを削除して、自動包含を防ぎます。

remove_action( 'wp_head', 'locale_stylesheet' );

そして自分のコードでそれをエンキューしてください。

global $$wp_locale; 

$stylesheet_dir_uri = get_stylesheet_directory_uri();
$dir = get_stylesheet_directory();
$locale = get_locale();


if ( !empty($wp_locale->text_direction) && file_exists("$dir/{$wp_locale->text_direction}.css") )
        enqueue "$stylesheet_dir_uri/{$wp_locale->text_direction}.css";
  1. 'locale_stylesheet_uri'フィルタを使用して、あなたがURLに好む接尾辞を追加するか、単に''を返して#1のように自分でそれをエンキューする
2
Mark Kaplun