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?
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 echo
s 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.
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
.