悲哀地get_categories()
and get_terms()
won\'t likely ever support \'orderby\' => \'rand\'
这确实给你留下了两个选择-获取每个类别并随机选择5个,或者构建自己的类别WP_Query
查询类别的步骤\'orderby\' => \'rand\'
. 前者更容易实现,并且可能有更好的性能(除非您有非常多的类别)。
因此,出于您的目的,以下内容就足够了:
$categories = get_categories();
shuffle( $categories );
$categories = array_slice( $categories, 0, 5 );
之后
$categories
将包含5个随机选择的类别。
从技术上讲rand_keys()
接近速度稍快。但在实践中,这种差异可以忽略不计(我们说的是纳秒),除非你在处理成千上万的类别。
值得注意的是,如果您的WordPress安装不包含至少5个类别,那么上面的代码将抛出一个错误(就像您问题中的代码片段一样),因为您无法获取一个数组的前5个元素,而这个数组的长度只有3个元素。
您可以对其进行改进,将其放入函数中以使其可重用且更灵活,并添加一些检查以帮助避免潜在错误:
function get_random_categories( $number, $args = null ) {
$categories = get_categories( $args ); // Get all the categories, optionally with additional arguments
// If there aren\'t enough categories, use as many as possible to avoid an error
if( $number > count( $categories ) )
$number = count( $categories );
// If no categories are available or none were requested, return an empty array
if( $number === 0 )
return array();
shuffle( $categories ); // Mix up the category array randomly
// Return the first $number categories from the shuffled list
return array_slice( $categories, 0, $number );
}
加载该函数后,您只需调用
$categories = get_random_categories( 5 );
要获得包含5个随机类别的数组,如果安装的类别总数少于5个,则只需按随机顺序返回尽可能多的可用类别。
获取随机帖子要容易得多,因为您只需使用\'orderby\' => \'rand\'
参数,如您所述-当省略分类法和类别参数时,默认情况下查询将返回所有类别的帖子。