WordPress : wp_script_add_data ne semble pas fonctionner

Publié par Jean-Michel le

J’ai essayé de suivre le codex en suivant divers fils ici, simples, copier-coller divers exemples mais en vain. Cela ne fonctionne tout simplement pas.

A-t-il été déprécié ? Est-ce que quelqu’un a réussi à faire fonctionner cela dans une version récente de WP ou 5.7 spécifiquement

 function my_scripts() {
wp_enqueue_script( 'bs-popper', 'https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.1/dist/umd/popper.min.js', array('jquery'), _S_VERSION, true );
wp_script_add_data('bs-popper' , array('integrity') , array('sha384-XXXXXXXXXXXXXXXX'));
}
add_action( 'wp_enqueue_scripts', 'my_scripts' );

[EDIT] Simple : l’exemple ci-dessus provenait d’une version qui en avait plus d’une mais celle-ci simple ne fonctionne pas non plus

wp_script_add_data('bs-popper' , 'integrity' , 'sha384-XXXXXXX');

Solution n°1 trouvée

Ce n’est pas ce qui wp_script_add_data()fait.

Il ne prend pas en charge l’ajout d’attributs arbitraires à la balise de script. Il vous permet d’ajouter des métadonnées au script mis en file d’attente, mais par défaut, la seule clé prise en charge par WordPress est 'conditional', qui est utilisée pour indiquer au script s’il doit être chargé dans certaines versions d’IE. Par exemple, ceci :

wp_script_add_data('bs-popper' , 'conditional' , 'IE 9');

Se traduira par ceci:

<!--[if IE 9]>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.1/dist/umd/popper.min.js" id="bs-popper-js">
<![endif]-->

Mais ça:

wp_script_add_data('bs-popper' , 'attribute' , 'value');

Ne fera rien.

Si vous souhaitez pouvoir ajouter des attributs aux scripts de cette manière, vous devez utiliser le script_loader_tagfiltre pour filtrer le code HTML de la <script>balise afin d’ajouter l’attribut si les données ont été ajoutées avec wp_script_add_data(). Il y a un exemple de cela ici, mais pour votre cas d’utilisation, cela ressemblerait à ceci :

add_filter(
    'script_loader_tag',
    function( $tag, $handle ) {
        $integrity = wp_scripts()->get_data( $handle, 'integrity' );

        if ( $integrity ) {
            $tag = str_replace( '></', ' integrity="'. esc_attr( $integrity ) .'"></', $tag );
        }

        return $tag;
    },
    10,
    2
);

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *