web-dev-qa-db-fra.com

Ajouter un script en tant que dépendance à un script enregistré

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.

6
Stephen Harris

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.

Exemple d'utilisation

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.

}
12
Stephen Harris

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:

  • désenregistrez-vous et enregistrez à nouveau avec les données souhaitées
  • modifier les données dans la variable globale correspondante
  • gérer le minutage d'une autre manière, telle que la sortie manuelle et les priorités de points d'ancrage
4
Rarst