Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress 在foreach循环中使用wp\u get\u attachment\u image\u src_Wordpress_Foreach_Advanced Custom Fields - Fatal编程技术网

Wordpress 在foreach循环中使用wp\u get\u attachment\u image\u src

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

我通过高级自定义字段将10个图像添加到帖子中,它们的名称从1到10不等,例如“image”*,ACF设置为返回ID

我试图获取循环中每个图像的完整大小的图像URL,并将其用作
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 } ?>