Wordpress 在foreach循环中使用wp\u get\u attachment\u image\u src
我通过高级自定义字段将10个图像添加到帖子中,它们的名称从1到10不等,例如“image”*,ACF设置为返回ID 我试图获取循环中每个图像的完整大小的图像URL,并将其用作Wordpress 在foreach循环中使用wp\u get\u attachment\u image\u src,wordpress,foreach,advanced-custom-fields,Wordpress,Foreach,Advanced Custom Fields,我通过高级自定义字段将10个图像添加到帖子中,它们的名称从1到10不等,例如“image”*,ACF设置为返回ID 我试图获取循环中每个图像的完整大小的图像URL,并将其用作href属性来打开图像的完整大小弹出窗口,但是我不明白wp\u get\u attachment\u image\u src是如何工作的 由于我无法使用Advanced Custom Field的中继器,所以我使用这个循环来获取自定义图像大小为缩放的图像数组,它可以很好地生成我需要的响应图像标记: // args
href
属性来打开图像的完整大小弹出窗口,但是我不明白wp\u get\u attachment\u image\u src是如何工作的
由于我无法使用Advanced Custom Field的中继器,所以我使用这个循环来获取自定义图像大小为缩放的图像数组,它可以很好地生成我需要的响应图像标记:
// args
$sizeHuge = 'scaled'; // scaled image
$images = array(); // img array
for($x = 1; $x <= 10; $x++) {
$img = get_field('image_' . $x);
if($img) {
$images[] = $img;
} else {
break;
}
}
<?php foreach($images as $image) { ?>
<a href="" class="open-viewer">
<?php echo wp_get_attachment_image( $image, $sizeHuge ); ?>
</a>
<?php } ?>
我的问题是:如何使用正确的URL设置a.open-viewer
的href
,其次,我的代码为什么会失败?(调试已打开,但未出现错误)。
我意识到我在这里严重误解了一些东西,我是一名PHP新手,因此任何关于我的方法的建议都将不胜感激。在循环的第一个块中,您将$link
的值设置为$image\u array[0]
的值,但每次都会覆盖它。您需要在此处array\u push
$images = array();
for($x = 1; $x <= 10; $x++) {
$img = get_field('image_' . $x);
$image_array = wp_get_attachment_image_src($img, $sizeFull);
if($image_array && $image_array[0]) {
array_push($images,
array(
src => $image_array[0],
id => $img
)
);
} else {
break;
}
}
$images=array();
对于($x=1;$x$image\u数组[0],
id=>$img
)
);
}否则{
打破
}
}
现在,当您在第二个阵列上循环时,您只需执行以下操作:
<?php foreach($images as $image) { ?>
<a href="<?php echo $image['src']; ?>" class="open-viewer">
<?php echo wp_get_attachment_image( $image['id'], $sizeHuge ); ?>
</a>
<?php } ?>
href
的值应为图像URL。以下是适用于您的更新/更正代码:
<?php
// args
$sizeFull = 'full'; // full size image
$sizeHuge = 'scaled'; // scaled image
$images = array(); // img array
for($x = 1; $x <= 10; $x++) {
$img = get_field('image_' . $x);
if($img) {
$images[] = $img;
} else {
break;
}
}
<?php foreach($images as $image) {
$image_array = wp_get_attachment_image_src($image, $sizeFull);
$link = $image_array[0];
?>
<a href="<?php echo $link; ?>" class="open-viewer">
<?php echo wp_get_attachment_image( $image, $sizeHuge ); ?>
// or Rather than calling above function, why don't you write <img> tag as you already have image url ? Like:
<img src="<?php echo $link; ?>" class="">
</a>
<?php } ?>
您是在中继器字段中添加了图像还是创建了10个不同id的不同字段?@Balwant否,我无法使用中继器扩展,所以我创建了10个不同id的图像。作为一个旁白,$sizeHuge
和$sizevell
作为常量将更具可读性(语义上更正确)<代码>常量大小_FULL=“FULL”
etc谢谢,现在可以完美地创建a
标记,但是一起吗?你给了我一个很好的起点,谢谢你的支持help@DavidAlsbright-请参阅更新的答案,wp\u get\u attachment\u image
将图像附件ID作为其第一个参数,您可以从get\u字段
获取该ID。更新的代码应允许您从原始循环访问ID。如果出于任何原因,wp\u get\u attachment\u image\u src()
未找到附件,则返回false。在这种情况下,尝试访问布尔值的数组索引时,此代码将失败。
<?php
// args
$sizeFull = 'full'; // full size image
$sizeHuge = 'scaled'; // scaled image
$images = array(); // img array
for($x = 1; $x <= 10; $x++) {
$img = get_field('image_' . $x);
if($img) {
$images[] = $img;
} else {
break;
}
}
<?php foreach($images as $image) {
$image_array = wp_get_attachment_image_src($image, $sizeFull);
$link = $image_array[0];
?>
<a href="<?php echo $link; ?>" class="open-viewer">
<?php echo wp_get_attachment_image( $image, $sizeHuge ); ?>
// or Rather than calling above function, why don't you write <img> tag as you already have image url ? Like:
<img src="<?php echo $link; ?>" class="">
</a>
<?php } ?>