web-dev-qa-db-fra.com

Obtenir la liste des scripts/styles et montrer le fichier qui les a mis en file d'attente

Je veux montrer quels scripts et styles ont été chargés sur une page et quel plugin/thème/fichier les a ajoutés à la page.

Nous pouvons montrer tous les scripts et styles en utilisant:

<?php
  global $wp_scripts, $wp_styles;
  var_dump( $wp_scripts );
  var_dump( $wp_styles );
?>

Ou plus élégamment en utilisant cette réponse: Comment puis-je obtenir le descripteur $ pour tous les scripts en file d'attente?

Je veux maintenant pouvoir voir où ils ont été mis en file d'attente. Par exemple, si j'avais un fichier JS appelé foobar.js et qu'il avait été mis en file d'attente par plugins/organge/orange.php, je voudrais afficher cet emplacement de fichier avec le script.

Ceci est pour le développement pour aider à isoler ce qui charge quoi.

5
raison

Ce n'est pas possible comme vous le pensez. Cela serait peut-être possible si vous utilisez des réflexions ou debug_backtrace() , mais il n’existe aucun moyen fiable de le faire. WordPress ne conserve pas une pile ou une file d'attente où il suit les noms de fichiers.

La chose seulement que je pouvais imaginer est simplement liée à l'action et à l'intérieur wp_enqueue_scripts() :

wp_enqueue_scripts

et attachez un mécanisme de suivi de rappels attachés à cet endroit. Notez la s et que ce n'est pas la fonction que vous utilisez pour attacher des scripts à la pile.

<?php
/** Plugin Name: (WPSE #152658) Script Loader Callback Inspector */
add_action( 'wp_enqueue_scripts', function()
{
    var_dump( $GLOBALS['wp_filter'][ current_filter() ] );
}, PHP_INT_MAX -1 );

Cela vous laisserait avec une file d'attente de tous les rappels attachés. Vous pouvez ensuite les retracer avec votre IDE.

4
kaiser

J'utilise quelque chose comme ça

 foreach( $wp_scripts->queue as $handle ) :
         $obj = $wp_scripts->registered [$handle];
         $filename = $obj->src;
1
Creative Choice