[WordPress] Chargement conditionnel des widgets (performance)


L’une des plus grandes forces de la plateforme de blogging Worpdress est la richesse de son catalogue de plugins. La plupart d’entre-eux sont des widgets, qui permettent d’afficher des informations supplémentaires sur les pages du blog.

Pourtant, le système de widgets a une grande faiblesse. Il charge l’ensemble de ceux-ci quelle que soit la page courante, même si les widgets ne sont pas affichés ou n’affichent rien. Avec les thème complexes que l’on trouve désormais, qui affiche des mises en page avancées, cela ressemble fort à un gâchis de ressources.

Par exemple, sur ce blog, la home-page n’affiche pas les widgets des derniers billets, des top commentateurs, … même si la sidebar est cachée.

 
Le framework Thematic propose une solution astucieuse pour gérer cela.

Cela passe par l’ajout d’une fonction dans le fichier functions.php :

function is_sidebar_active($index) {
	global $wp_registered_sidebars;
 
	$widgetcolums = wp_get_sidebars_widgets();
 
	if ($widgetcolums[$index])
		return true;
 
	return false;
}

Il suffit ensuite de tester si la barre de widget (ici my-sidebar) est affichée ou pas :

<?php if ( function_exists('is_sidebar_active') && is_sidebar_active('my-sidebar') ) { ?>
	<div id="my-sidebar">
		<ul>
			<?php dynamic_sidebar('my-sidebar'); ?>
		</ul>
	</div>
<?php } ?>

Cela suffira à supprimer le chargement de certains widgets inutiles, et donc à accélérer le chargement de certaines pages de votre blogs.

Ce tips n’est pas une grande nouveauté mais beaucoup de créateurs de thèmes oublient de l’inclure.

via wpengineer