使用sidebars_widget 滤器
我们要做的是,在后端,将我们的三个小部件添加到所需的侧栏中。这将一如既往地按照所有小部件在边栏后端的显示顺序显示它们。
如果你只在主页上需要它,那么注册一个侧栏,然后有条件地(is_home())将其包含在模板中。
无论如何,我们现在将使用sidebars_widget 筛选以随机删除我们添加的三个侧栏中的两个。这将给您留下一个随机的小部件。但必须注意的是,您可能会在新页面加载上显示相同的小部件,因为任何随机的内容都无法控制。在三个数字中,随机选择两个,总是有可能再次选择相同的两个数字。如果您需要对此进行更多的控制,那么您需要更改特定的代码段,并以某种方式实现另一个更可靠的系统来处理此问题
这是代码,我已经对其进行了注释,因此您可以轻松地遵循它,并根据需要进行修改。只需注意,更改sidebar-2 精确到ID 您需要瞄准的侧边栏的
add_filter( \'sidebars_widgets\', function ( $sidebars_widgets )
{
    // Return our filter when we are on admin screen
    if ( is_admin() )
        return $sidebars_widgets;
    /**
     * We only want to target only the homepage, so return if it is not homepage
     * You would want to register the sidebar also only on the homepage, otherwise you would
     * need to extend the function to remove the widgets on any other page
     */
    if ( !is_home() )
        return $sidebars_widgets;
    // The ID of the sidebar you want to target
    $sidebar_id_to_target = \'sidebar-2\';
    foreach ( $sidebars_widgets as $key=>$sidebars_widget ) {
        // Skip a sidebar if it it isn\'t our $sidebar_id_to_target
        if ( $key != $sidebar_id_to_target )
            continue;
        // Count the amount of widgets in the desired sidebar
        $counter = count( $sidebars_widget );
        // If the count is 0 or 1, return early
        if ( $counter <= 1 )
            break;
        /**
         * We now want to select a random widget, which will be a random array key
         * We would also need to unset the other two
         */
        $random_numbers = array_rand( range( 0, ( $counter - 1 ) ), ( $counter - 1 ) );
        foreach ( $random_numbers as $random_number )
            unset( $sidebars_widgets[$sidebar_id_to_target][$random_number] );
    }
    return $sidebars_widgets;
});