Random taxonomy category list

时间:2014-09-03 作者:Fromstephen

我正在尝试在页面上显示一个自定义分类列表。

我想显示五个,但当页面刷新时,它们以不同的随机顺序排列。

我尝试过使用shuffle,但它只对前5个进行shuffle,其他的都看不到。

我试过了orderby RAND 但它不起作用。这是我目前的代码。

<?php
$all_artists = get_terms( \'artists\', array(
"number" => 5,                           
\'hide_empty\' => 1,
\'exclude\' => array($cat->term_id),                      
) );          

shuffle( $all_artists );
foreach ($all_artists as $cat) :?>

<li class=\'post\'>
<a href="<?php echo get_term_link($cat->slug, \'directors\'); ?>">
<div class=\'thumb-post\'>

<img src="<?php echo z_taxonomy_image_url($cat->term_id, \'poster\'); ?>" />

</div>
<h2> <?php echo $cat->name; ?></h2>
<p class=\'meta\'>
</p>
</a></li>


 <?php endforeach; ?>

1 个回复
SO网友:Pieter Goosen

没有默认方式对术语进行随机排序。使用php有很多方法可以做到这一点。

首先,您需要删除number 参数来自get_terms. 按照您的代码目前的状态,您将获得5个术语,并将它们重新组合。

为了实现这一点,您需要从分类中检索所有术语,使用php函数随机洗牌返回的数组shuffle(), 通过一个foreach 循环,创建一个新数组,然后使用array_slice 获取前5个条目

这只是一个粗略的想法

$all_artists = get_terms( \'category\' );          
shuffle( $all_artists );

$term_names = [];
foreach ( $all_artists as $cat )
    $term_names[] = $cat->name;

$output = array_slice( $term_names, 0, 5 );

foreach ( $output as $key=>$value )
     echo \'<p>\' . $value . \'</p>\';

EDIT

这里有另一种实现同样目标的方法。这涉及到创建一个自定义函数来对数组进行随机排序,并将键/值对保留在适当的位置。此函数来自this answer 由@karim79发布

然后您可以使用array_slice() 获取前%键/值对

function shuffle_assoc( $list ) 
{ 
    if ( !is_array( $list ) ) 
        return $list; 

    $keys = array_keys( $list ); 
    shuffle( $keys ); 

    $random = []; 
    foreach ( $keys as $key ) 
    { 
        $random[$key] = $list[$key]; 
    }
    return $random; 
} 

$terms  = get_terms( \'category\' );  
$output = array_slice( shuffle_assoc( $q ), 0, 5 );
?><pre><?php var_dump($output)); ?></pre><?php

结束

相关推荐

Taxonomy term count

我有一个名为“资源”的自定义帖子类型,用于在我的网站上创建资源目录。该CPT具有称为“价格”的分类法。有三个术语因此,当有人在查看我的目录时,他们会在侧栏中看到“价格”以及下面的选项,他们可以单击(例如)免费并查看列出的18种不同的免费资源。我想要的是学期页面我的网站。com/价格/免费要有标题18免费资源我怎样才能做到这一点?