web-dev-qa-db-ja.com

スクリプト/スタイルの登録:プラグインを介してバージョンクエリ文字列をカスタマイズすることは可能ですか?

タイトルの質問を拡大します。

wp_register_stylewp_register_scriptで出力されるJSとCSSのファイルバージョンのクエリ文字列にタイムスタンプを使用する方法を(プラグイン経由で)見つけたいと思います。

私はこれを呼び出し自体で簡単に修正できることを知っています、そして現在私はこうします:

$style_mtime = filemtime(dirname(__FILE__) . '/css/style.css');
wp_register_style( 'fstop-stylesheet', get_stylesheet_directory_uri() . '/library/css/style.css', array(), $style_mtime , 'all');
wp_enqueue_style( 'fstop-stylesheet' );

タイムスタンプ部分をプラグインに渡すことができれば私はそれが大好きだ。私は最近、クエリ文字列をファイル名に移動するのに良い仕事をするこのプラグインを見つけました、それはプロキシのためにより良いキャッシングをもたらすべきです: https://Gist.github.com/ocean90/1966227

そしてそれはうまくいきます。プロセス全体を自動化するためにタイムスタンプを追加したいと思います。

アイデア?

1
Gabriel Luethje

古い答え(あなたがキャッシュバスターを望んでいたという誤解に基づいて):あなたは、クエリ引数を追加/置換する add_query_arg() を使うことができます。

<?php
/**
* Plugin Name: wpse_84670
* Version: 0.0.1
* Description: replace script/style version with time as a cache buster
*/

/**
* replace script or stylesheet version with current time
* @param  string $url the source URL
* @return string
*/
function wpse_84670_time_as_version($url) {
    return add_query_arg(array('ver' => time()), $url);
}

add_filter('script_loader_src', 'wpse_84670_time_as_version');
add_filter('style_loader_src', 'wpse_84670_time_as_version');

新しい答え:それをしないでください!それはページ上のすべてのキューに入れられたスクリプトとスタイルシートのためにファイルアクセスを強制します、そしてあなたがどのプラグインをアクティブにしたかに依存します。それらの多くは、ブラウザがそれらのファイルを要求することすらありません(スクリプトとスタイルシートのために設定された期限が切れているなら - そしてあなたはそうすべきです!)

代わりに、テーマのエンキューコードを囲む関数をラップするだけで、テーマがエンキューするファイルに対してのみファイルアクセスを行うことができます。

さらに良いことに、あなたのテーマにローリングバージョン番号を保存し(私のテーマでは、私はそれを$forceLoadと呼びます)、wp_enqueue_scriptに渡されるバージョンとしてそれを使用します。追加のファイルアクセスは必要ありません。

$forceLoad = '42';
wp_enqueue_style('fstop-stylesheet', get_stylesheet_directory_uri() . '/library/css/style.css', false, $forceLoad, 'all');
2
webaware