J'ai une barre latérale qui pourrait avoir un nombre quelconque de widgets. Je peux compter le nombre de widgets qui existent dans la barre latérale. Comment afficher au hasard un seul des widgets dans ma barre latérale à chaque chargement de page?
Utilisation: Nous avons des promotions que nous affichons sous forme de widgets, mais nous souhaitons uniquement afficher le contenu d'un widget à la fois dans le pied de page du site.
re: le code de compte
<?php $the_sidebars = wp_get_sidebars_widgets();
echo count( $the_sidebars['center-footer'] ); ?>
re: générer une instance de widget aléatoire
<?php echo Rand(1, count( $the_sidebars['center-footer'] )); ?>
Je ne pouvais pas voir que les réponses dans le lien en double possible utilisaient le filtre sidebars_widgets
, alors laissez-moi l'ajouter ici comme autre possibilité:
Ce qui suit suppose que vous utilisez la fonction dynamic_sidebar()
pour afficher vos barres latérales/widgets ou simplement tout ce qui appelle la fonction wp_get_sidebars_widgets()
.
Cet extrait de code affiche tous les widgets dans un ordre aléatoire:
/**
* Randomize widgets in a given sidebar (index)
*
* @See http://wordpress.stackexchange.com/a/152408/26350
*/
! is_admin() && add_filter( 'sidebars_widgets', function( $sidebars_widgets ) {
// ------------------------
// Edit this to your needs:
$sidebar_index = 'sidebar-1';
// ------------------------
if( isset( $sidebars_widgets[$sidebar_index] ) )
{
// Randomize the array:
shuffle( $sidebars_widgets[$sidebar_index] );
}
return $sidebars_widgets;
}, PHP_INT_MAX );
Cet extrait de code n'affiche qu'un seul widget aléatoire:
/**
* Randomize widgets in a given sidebar (index) and only display a single widget
*
* @See http://wordpress.stackexchange.com/a/152408/26350
*/
! is_admin() && add_filter( 'sidebars_widgets', function( $sidebars_widgets ) {
// ------------------------
// Edit this to your needs:
$sidebar_index = 'sidebar-1';
// ------------------------
if( isset( $sidebars_widgets[$sidebar_index] ) )
{
// Randomize the array:
shuffle( $sidebars_widgets[$sidebar_index] );
// Slice the array:
$sidebars_widgets[$sidebar_index] = array_slice( $sidebars_widgets[$sidebar_index], 0, 1 );
}
return $sidebars_widgets;
}, PHP_INT_MAX );
N'oubliez pas de modifier le $sidebar_index
selon vos besoins.
J'espère que ça aide.