我希望创建一个滑块,使用ACF在每个页面上显示一个单独的滑块,该页面有自己的图像加载到gallery字段中。
目前,我使用flexslider创建了滑块,并成功地获得了要显示的图像,但问题是,所有图像都显示在具有图像集的每个页面上。所以第1页有图像1,这只显示在第1页上(没有其他页面),这就是我想要的。但是,如果将图像添加到第2页,则第1页和第2页都会显示带有图像1和2的滑块。我需要有单独的幻灯片图像为每个单独的页面,我需要滑块不显示,如果没有图像设置在一个页面上。我希望一切都有意义。这是我目前掌握的代码:
<div id="featured" class="flexslider clearfix">
<ul class="slides">
<?php
$args = array(
\'post_type\' => \'page\',
);
$the_query = new WP_Query($args);
?>
<?php if (have_posts()) : while ($the_query->have_posts()) : $the_query->the_post(); ?>
<?php
$images = get_field(\'slider_image\');
if ($images): ?>
<?php foreach ($images as $image): ?>
<li>
<img src="<?php echo $image[\'url\']; ?>">
</li>
<?php endforeach; ?>
<?php endif; ?>
<?php endwhile; endif;?>
</ul>
</div>
任何帮助都将不胜感激。我猜我需要按id或其他方式循环页面,但我对PHP非常陌生,所以我不完全确定。谢谢
最合适的回答,由SO网友:Tarik Causevic 整理而成
对于想要实现的目标,根本不需要循环。第1页和第2页都显示所有图像,因为您可以查询站点上的所有页面,然后从每个“slider\\u image”ACF字段中获取所有图像,并将它们放入foreach循环。
当您从任何字段获取值时,默认情况下它将获取当前页面的值,因此您无需传递任何其他ID,因为这是默认行为。
如果我理解正确,您需要的是可以在文档中找到的基本循环https://www.advancedcustomfields.com/resources/gallery/
<?php
$images = get_field(\'slider_image\');
if( $images ): ?>
<div id="featured" class="flexslider clearfix">
<ul class="slides">
<?php foreach( $images as $image ): ?>
<li>
<img src="<?php echo $image[\'url\']; ?>" width="<?php echo $image[\'width\']; ?>" height="<?php echo $image[\'height\']; ?>" alt="<?php echo $image[\'alt\']; ?>" />
</li>
<?php endforeach; ?>
</ul>
</div>
<?php endif; ?>
零件
if( $images ): 检查$图像是否包含任何值。如果不是,则该If中的任何内容都不会显示在页面上。也将输入if,这样页面上就不会有空div。
编辑:刚刚看到关于钩子的评论。然后您必须添加一个变量来获取当前页面的IDget_the_ID 并将该ID作为第二个参数传递到get\\u字段。这应确保您始终获得当前页面,其余页面应如上所述工作。