wp_register_script()
(voir codex ) vous permet de spécifier des dépendances: les scripts qui doivent être chargés avant celui qui est enregistré sont chargés (s’il est chargé).
Mais supposons que le script soit tiers (WordPress ou un autre plug-in), de sorte que vous n'êtes pas celui qui appelle wp_register_script()
. Comment pouvez-vous injecter un script en tant que dépendance pour un script pré-enregistré?
Remarques: Dans mon cas d'utilisation particulier, la dépendance n'est pas stricte - le script enregistré ne nécessite pas ce second script, mais ce dernier modifie le script d'origine.
Une question similaire pourrait être posée pour les styles, mais je suppose que les réponses seraient presque identiques.
Rechercher dans https://github.com/WordPress/WordPress/blob/3.5.1/wp-includes/class.wp-dependencies.php tous les scripts enregistrés sont stockés dans le $wp_scripts
global.
Vous pouvez y accéder directement via cela, mais je préfère utiliser l'API lorsqu'elle existe. Dans ce cas, $wp_scripts->query()
renvoie un script enregistré particulier (un objet _WP_Dependency
- voir source ).
Un objet _WP_Dependency
stocke les dépendances sous forme de tableau de descripteurs, auquel vous pouvez accéder directement et insérer une dépendance. La fonction suivante fait cela:
/**
* Add $dep (script handle) to the array of dependencies for $handle
* @see http://wordpress.stackexchange.com/questions/100709/add-a-script-as-a-dependency-to-a-registered-script
* @param string $handle Script handle for which you want to add a dependency
* @param string $dep Script handle - the dependency you wish to add
*/
function wpse100709_append_dependency( $handle, $dep ){
global $wp_scripts;
$script = $wp_scripts->query( $handle, 'registered' );
if( !$script )
return false;
if( !in_array( $dep, $script->deps ) ){
$script->deps[] = $dep;
}
return true;
}
Évidemment, vous devez ajouter ceci quelque part entre le script original ($handle
) enregistré et la mise en file d'attente.
Supposons que script_a
a été inscrit sur le hook init
avec la priorité 10 et que vous souhaitez ajouter script_b
en tant que dépendance:
add_action( 'init', 'wpse100709_register_script_b', 11 );
function wpse100709_register_script_b(){
//Register script b
wp_register_script( 'script_b', ... );
//Now add script b as being a pre-requisite for script a
wpse100709_append_dependency( 'script_a', 'script_b' )
//If script a is enqueued, script b is enqueued before it.
}
Il n'y a pas de moyen spécifique pour modifier les détails de la dépendance de script/style enregistrée après l'enregistrement. Vos options sont: