Je crée un plugin et je veux obtenir la liste de tous les scripts et CSS utilisés par d'autres plugins.
C'est ma fonction:
function crunchify_print_scripts_styles() {
$result = [];
$result['scripts'] = [];
$result['styles'] = [];
// Print all loaded Scripts
global $wp_scripts;
foreach( $wp_scripts->queue as $script ) :
$result['scripts'][] = $wp_scripts->registered[$script]->src . ";";
endforeach;
// Print all loaded Styles (CSS)
global $wp_styles;
foreach( $wp_styles->queue as $style ) :
$result['styles'][] = $wp_styles->registered[$style]->src . ";";
endforeach;
return $result;
}
add_action( 'wp_enqueue_scripts', 'crunchify_print_scripts_styles');
Je veux obtenir la valeur retournée dans une variable.
J'ai essayé ceci:
$toto = do_action( 'crunchify_print_scripts_styles' );
var_dump( $toto );
Et voici mon résultat:
NULL
Si j'écris à l' echo
intérieur de chaque foreach
boucle, j'obtiens les résultats corrects, mais comment stocker ces valeurs dans une variable?
[Éditer]
Mon code dans un plugin qui ne fonctionne pas trop
/**
* Get all scripts and styles from Wordpress
*/
function print_scripts_styles() {
$result = [];
$result['scripts'] = [];
$result['styles'] = [];
// Print all loaded Scripts
global $wp_scripts;
foreach( $wp_scripts->queue as $script ) :
$result['scripts'][] = $wp_scripts->registered[$script]->src . ";";
endforeach;
// Print all loaded Styles (CSS)
global $wp_styles;
foreach( $wp_styles->queue as $style ) :
$result['styles'][] = $wp_styles->registered[$style]->src . ";";
endforeach;
return $result;
}
add_action( 'wp_head', 'wp_rest_assets_init');
/**
* Init JSON REST API Assets routes.
*
* @since 1.0.0
*/
function wp_rest_assets_init() {
$all_the_scripts_and_styles = print_scripts_styles();
if ( ! defined( 'JSON_API_VERSION' ) &&
! in_array( 'json-rest-api/plugin.php', get_option( 'active_plugins' ) ) ) {
$class = new WP_REST_Assets();
$class::$scriptsAndStyles = $all_the_scripts_and_styles;
add_filter( 'rest_api_init', array( $class, 'register_routes' ) );
} else {
$class = new WP_JSON_Menus();
add_filter( 'json_endpoints', array( $class, 'register_routes' ) );
}
}
add_action( 'init', 'wp_rest_assets_init' );
wp-enqueue-script
wp-enqueue-style
scripts
css
Edouard Kombo
la source
la source
do_action
ne renvoie pas de résultat, et d'ailleurs, l'action a déjà eu lieu àwp_enqueue_scripts
... plus facile juste pour créer un global, par exemple.global $crunchifyenqueued; $crunchifyenqueued = $result;
puis appelez à nouveau le global dans votre fonction ultérieure pour accéder à la variable.apply_filters
alors? vous pouvez facilement en obtenir la valeur de retour.Réponses:
do_action
ne fonctionne pas tout à fait comme ça. Lorsque vous appelezdo_action('crunchify_print_scripts_styles')
WP, il examine sa liste d'actions enregistrées et les filtres de celles qui sont attachées à un hook appelécrunchify_print_scripts_styles
, puis exécute ces fonctions.Et vous voulez probablement supprimer ceci:
... car vous ne pouvez pas obtenir le résultat de retour de votre fonction.
De plus, lorsque vous utilisez ce hook particulier, vous ne pouvez pas garantir que d'autres fonctions ne mettent pas en file d'attente plus de scripts ou de styles après avoir généré votre liste. Utilisez un crochet qui se déclenche après que tous les scripts et styles ont été mis en file d'attente, tels que wp_head, pour plus de commodité, ou mieux encore, appelez simplement votre fonction dans votre thème lorsque vous souhaitez afficher le résultat.
Retravailler votre code comme ça devrait fonctionner ...
Puis dans votre thème:
... vous montrera les résultats du débogage, ou bien sûr ...
... vous donnera la liste à manipuler.
L'appeler dans le thème garantit que vous l'appelez une fois tous les scripts et styles mis en file d'attente.
Pour l'appeler à partir de votre plugin, attachez-le à n'importe quel hook qui s'exécute après wp_enqueue_scripts, comme wp_head comme je l'ai mentionné ci-dessus:
la source
$all_the_scripts_and_styles = crunchify_print_scripts_styles();
intérieur de votre plugin! Ajustement de la réponse pour convenir.global wp_scripts
global wp_styles
soit totalement vide. Mais ils travaillent avec undo_action or apply_filters
wp_enqueue_scripts
action comme je l'avais recommandé à l'origine?Vous pouvez utiliser
wp_print_scripts
et leswp_print_styles
actions à temps opportun et correctement l' accès aux scripts en file d' attente et de styles, comme ces actions sont les derniers événements avant les scripts et les styles sont inclus dans le document et, à cause de cela, le dernier cas où des modifications sur$wp_styles
ou$wp_scripts
pourrait avoir un effet sur les styles et scripts inclus dans le document.Ce sont donc les événements où vous pouvez être plus confiant
$wp_styles
et$wp_scripts
contenir les scripts et les styles effectivement inclus dans le document.Si vous déclarez
$enqueued_scripts
adn en$enqueued_styles
tant que variables globales (ou toute autre étendue valide, par exemple, vous pouvez le stocker dans la propriété d'une méthode), vous pouvez accéder à la liste des scripts et des styles dans une action ultérieure.Par exemple (juste un petit exemple):
la source
Si vous voulez vraiment obtenir une liste de tous les styles, vous pouvez utiliser le nouveau filtre 'script_loader_tag' (depuis la version 4.1).
Le "wp_print_scripts" est:
c'est-à-dire qu'il n'affiche pas les scripts dans le pied de page.
Les références:
Ajouter des attributs Defer & Async aux scripts WordPress
wp_print_scripts
la source