web-dev-qa-db-fra.com

Enregistrer le script/le style: Est-il possible de personnaliser la chaîne de requête de version via un plugin?

Développer la question dans le titre:

J'aimerais trouver un moyen (via un plugin) d'utiliser des horodatages pour les chaînes de requête de version de fichier JS et CSS qui sont générées avec wp_register_style et wp_register_script.

Je sais que cela peut être facilement modifié dans les appels eux-mêmes, et je le fais de cette façon actuellement:

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

J'adorerais si je pouvais passer la partie timestamp dans un plugin. J'ai récemment trouvé ce plugin qui permet de déplacer la chaîne de requête dans le nom du fichier, ce qui devrait permettre une meilleure mise en cache des mandataires: https://Gist.github.com/ocean90/1966227

Et ça marche bien. Je voudrais ajouter le bit d'horodatage pour automatiser l'ensemble du processus.

Des idées?

1
Gabriel Luethje

Ancienne réponse (basée sur l'idée fausse que vous vouliez un cache bus): Vous pouvez utiliser add_query_arg () qui ajoute/remplace les arguments de la requête.

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

Nouvelle réponse: ne fais pas ça! Cela forcera un accès au fichier pour chaque script et feuille de style mis en file d'attente sur une page, et selon les plugins que vous avez activés, cela pourrait signifier une douzaine d'accès de fichier ou plus pour chaque accès à une page/publication. Beaucoup d'entre eux ne donneront même pas le navigateur demandant ces fichiers (si vous avez des délais d'expiration configurés pour les scripts et les feuilles de style - et vous devriez le faire!)

Au lieu de cela, enveloppez simplement une fonction autour de votre code de mise en file d'attente pour votre thème, de sorte que vous ne fassiez qu'un accès au fichier pour les fichiers que votre thème met en file d'attente.

Mieux encore, conservez un numéro de version évolutif dans votre thème (dans mes thèmes, je l'appelle $forceLoad) et utilisez-le comme version transmise à wp_enqueue_script. Aucun accès supplémentaire aux fichiers requis.

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