【问题标题】:Programmatically adding images from a URL to WP then adding to repeater field以编程方式将图像从 URL 添加到 WP,然后添加到转发器字段
【发布时间】:2018-06-21 09:18:39
【问题描述】:

我正在尝试以编程方式将图像从 URL 添加到 Wordpress 媒体库(该部分有效),然后将每个图像添加到 ACF 的转发器行。

目前它只将最后一张图片添加到第一行。应该有 5 张图片(因此转发器中有 5 行),但转发器只包含最后一张图片的一行。

我哪里错了?

当在循环中输出$item 时,它会正确输出 5 个图像 ID,所以问题似乎出在更新部分,它只是覆盖了第一行...我在第一个循环之后放了一个 break;,它显示了第一个图像。

// Product Carousel Images
$fullpath = get_stylesheet_directory_uri() . "/import/";
foreach($html->find('div[id=imageTabContent] img[class=img-responsive]') as $element) {

  $strippedpath = strstr($element->src, 'images');
  $url = $fullpath . $strippedpath;
  $image = media_sideload_image($url, $post_id, $strippedtitle, $return = 'id');

  $images[] = $image;

}
$counter = 1;
foreach($images as $item) {
  echo $item;
  echo "<br />";
  $field_key = "field_5ae05c498ac63";
  $value = array(
    array(
      "image"   => $item,
    )
  );
  update_field( $field_key, $value, $post_id );
  $counter++;
}

【问题讨论】:

  • $field_key 似乎设置为静态值。它在循环内不会改变,并且 update_field 函数会更新相同的字段 5 次。
  • @ElvinHaci 字段键是转发器的名称,因此应该保持不变,它应该向该转发器添加新行,但没有。
  • 我知道。但是您的代码会更新同一字段 5 次。它没有得到附加第二行的命令,这就是它更新第一个值的原因。我认为您需要将 update_field 从循环中移出并仅调用一次。而不是将 $value 转换为 5 个元素的数组。如$value = array(array('image'=>''), array('image'=>''), ....);
  • @ElvinHaci 我在advancedcustomfields.com/resources/update_field 处关注了他们的文档(重复示例)。但是,是的,这是一个有趣的想法......你能把它放在答案中吗?
  • 当然,我现在就去做

标签: php wordpress advanced-custom-fields


【解决方案1】:

您的代码将更新同一字段 5 次。

它没有得到命令来追加第二行,这就是它更新第一个值的原因。我认为您需要将 update_field 从循环中移出并仅调用一次。而不是将 $value 转换为 5 个元素的数组。比如

$value=array();
foreach($images as $item) {
  echo $item;
  echo "<br />";
  $field_key = "field_5ae05c498ac63";
  $value[]=array(
      "image" => $item,
    );
  $counter++;
}
update_field( $field_key, $value, $post_id );

【讨论】:

  • 太好了,谢谢。很接近了,现在已经创建了行但是还没有输入图片。
  • 知道了,我删除了子字段旁边的$counter,它起作用了!非常感谢!!
猜你喜欢
  • 2011-06-06
  • 1970-01-01
  • 2020-07-16
  • 1970-01-01
  • 2017-11-24
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
相关资源
最近更新 更多