随机化我侧边栏中显示的小部件

时间:2014-07-01 作者:Gordon

我有一个边栏,它可能有任意数量的小部件。我可以计算侧栏中存在的小部件的数量。如何在每次页面加载时仅随机显示侧边栏中的一个小部件?

用途:我们有一些特殊的小部件,可以显示为小部件,但我们一次只想在站点的页脚中显示一个小部件的内容。

关于:计数代码

<?php $the_sidebars = wp_get_sidebars_widgets();
echo count( $the_sidebars[\'center-footer\'] ); ?>
回复:生成随机小部件实例

<?php echo rand(1, count( $the_sidebars[\'center-footer\'] )); ?>

1 个回复
SO网友:birgire

我看不到可能重复链接中的答案是否使用sidebars_widgets 过滤器,所以让我在这里添加它作为另一种可能性:

以下假设您使用dynamic_sidebar() 函数来显示边栏/小部件或任何调用wp_get_sidebars_widgets() 作用

随机化小部件:

此代码段以随机顺序显示所有小部件:

/** 
 * 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 );
随机小部件-仅显示单个小部件:此代码段仅显示单个随机小部件:

/** 
 * 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 );
您只需记住编辑$sidebar_index 满足您的需求。

我希望这有帮助。

结束

相关推荐

Page full of widgets?

有没有可能创建一个只有很多小部件的页面?我看到的大多数WP站点的小部件都在侧边栏中,但我想要一个只有小部件而没有其他内容的页面。我当前使用的主题允许我向页面添加列或表,但我不知道(在任何主题中)是否可以向这些列或表单元格添加小部件?