我有一个图像列表,我有一个wordpress循环。
我使用randompics()函数生成一个随机图像,用作prreview链接的背景。然而,我发现我在这里和那里生成重复图像并且它看起来不太好。
我想找到一种方法来确保我不会多次拥有相同的图像。在任何一个页面上只有10次循环迭代。
这是我的功能。
function randompics() {
$arrayName = array(
get_template_directory_uri().'/images/jobs_large/1.jpg',
get_template_directory_uri().'/images/jobs_large/2.jpg',
get_template_directory_uri().'/images/jobs_large/3.jpg',
get_template_directory_uri().'/images/jobs_large/4.jpg',
get_template_directory_uri().'/images/jobs_large/5.jpg',
get_template_directory_uri().'/images/jobs_large/6.jpg',
get_template_directory_uri().'/images/jobs_large/7.jpg',
get_template_directory_uri().'/images/jobs_large/8.jpg',
get_template_directory_uri().'/images/jobs_large/9.jpg',
get_template_directory_uri().'/images/jobs_large/11.jpg',
get_template_directory_uri().'/images/jobs_large/12.jpg',
//list goes up to 25 images
);
echo $arrayName[array_rand($arrayName)];
}
继承我的循环
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<div class="item-container">
<?php randompics(); ?>
</div>
<?php endwhile; else : endif;?>
提前致谢。
答案 0 :(得分:1)
我认为最简单的方法是使用静态变量:
function randompics() {
static $arrayName = null;
if (is_null($arrayNme)) {
$arrayName = array(
get_template_directory_uri().'/images/jobs_large/1.jpg',
get_template_directory_uri().'/images/jobs_large/2.jpg',
//list goes up to 25 images
);
shuffle($arrayName);
}
static $index = 0;
echo $arrayName[$index++];
}
这确实在函数调用之间共享数据,但通常不鼓励这样做。更好的解决方案(至少是恕我直言)将使用ImageRandomiser类并让该类的对象跟踪重复项。
使用,例如:
class ImageRandomiser
{
private $images;
private $index;
public function __construct(string ...$imageUris)
{
$this->index = 0;
$this->images = $imageUris;
shuffle($this->images);
}
public static function fromDefaults() : self
{
return new static(
get_template_directory_uri().'/images/jobs_large/1.jpg',
get_template_directory_uri().'/images/jobs_large/2.jpg',
// ...
);
}
public function imageUri() : string
{
$this->index++;
if ($this->index >= count($this->images)) {
$this->index = 0;
}
return $this->images[$this->index];
}
}
循环:
<?php
$random = ImageRandomiser::fromDefaults();
if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<div class="item-container">
<?php $random->imageUri(); ?>
</div>
<?php endwhile; else : endif; ?>