web-dev-qa-db-fra.com

mettre le script en file d'attente seulement s'il n'est pas déjà en file d'attente

Je veux inclure un script dans une sortie de shortcode, alors j'essaie ceci:

function my_shortcode( $atts, $content = null ) {
    extract(shortcode_atts(array(
            'title'  => '',
           ), $atts));

    wp_enqueue_script('custom-script'); 

}

J'ai déjà enregistré le script et l'ai mis en file d'attente si le shortcode ci-dessus est utilisé. Cependant, je souhaite inclure le fichier une seule fois, même si le shortcode est utilisé plusieurs fois. Actuellement, si le shortcode est utilisé plusieurs fois, il inclura le script pour chaque fois. C'est possible?

4
enam

Le système de mise en file d'attente de WordPress devrait empêcher l'inclusion du même script plusieurs fois, et le fait lorsque je le teste. Par exemple, ce qui suit met en file d'attente un script principal et echos un compteur. Si je mets ce shortcode dans un post 4 fois, j'obtiens "0123" mais le script de média ne charge qu'une seule fois. Le même test fonctionne avec plusieurs autres scripts que j'ai essayés.

function my_shortcode( $atts, $content = null ) {
    extract(shortcode_atts(array(
            'title'  => '',
           ), $atts));
    static $counter = 0;
    echo $counter++;
    wp_enqueue_script('wp-mediaelement'); 

}
add_shortcode('enq','my_shortcode');

Si le même script est chargé à plusieurs reprises, il y a un problème avec votre site, mais je ne sais pas trop par où commencer à deviner quoi.

10
s_ha_dum

Vous pouvez utiliser wp_script_is() pour déterminer si un script est mis en file d'attente - et l'utiliser de manière conditionnelle, comme ceci:

if( ! wp_script_is( 'custom-script', 'enqueued' ) ) {
    // your code here
}

wp_script_is() prend deux paramètres - $handle et $list - ce dernier peut être: registered, enqueued/queue, done ou to_do; et il retourne true ou false.

4
Nicolai