web-dev-qa-db-fra.com

Comment mettre automatiquement en file d'attente chaque script d'un dossier?

J'ai tout un dossier js de scripts et il serait fastidieux de les charger tous avec wp_enqueue_script() un par un.

Est-il possible de simplement insérer le répertoire dans lequel ils se trouvent et de le faire pour moi?

2
Lewis

Il n'y a rien de mal à mettre en file d'attente de nombreux fichiers à l'aide de wp_enqueue_script. Si vous parlez de frustrant, il existe alors une solution simple.

PHP propose une fonction permettant de lister les fichiers et les répertoires. En utilisant glob , vous pouvez répertorier tous les fichiers .js de votre répertoire, puis les mettre en file d'attente par une boucle.

function enqueue_my_scripts(){
    foreach( glob( get_template_directory(). '/path/*.js' ) as $file ) {
        // $file contains the name and extension of the file
        wp_enqueue_script( $file, get_template_directory_uri().'/path/'.$file);
    }
}
add_action('wp_enqueue_scripts', 'enqueue_my_scripts');

Un côté n'est pas que glob utilise un chemin relatif, mais wp_enqueue_script utilise des URL. C'est pourquoi j'ai utilisé différentes fonctions pour obtenir le chemin d'accès et l'URI du dossier.

7
Jack Johansson

Sur WordPress 4.9, le chemin relatif (get_template_directory) renvoyait $ file comme chemin complet, ce qui est inutilisable sur un serveur partagé. J'ai découvert que je devais utiliser la fonction substr pour renvoyer uniquement le nom du fichier, puis créer l'URI à partir de celui-ci.

foreach( glob( get_template_directory(). '/path/*.js' ) as $file ) {
    $filename = substr($file, strrpos($file, '/') + 1);
   wp_enqueue_script( $filename, get_template_directory_uri().'/path/'.$filename);
}
1
pixelslave