使用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;
});