更改特定自定义字段的wp_get_Attach_Image属性(src和srcset)

时间:2018-06-03 作者:Sam

我正在使用ACF 要在名为Flickity. Flickity 支持延迟加载的图像srcset。

下面是我的基本ACF标记,它使用wp_get_attachment_image:

<?php
  $image = get_field(\'image\');
  $size = \'gallery\';
  echo wp_get_attachment_image( $image, $size );
?>
这很好地在前端输出,如下所示:

<img
  width="1164"
  height="450"
  src="image-1164x450.jpg"
  srcset="
          image.jpg 1164w,
          image-300x116.jpg 300w,
          image-768x297.jpg 768w,
          image-1024x396.jpg 1024w,
          image-2328x900.jpg 2328w,
          image-1680x649.jpg 1680w,
          image.jpg 3492w
        "
  sizes="(max-width: 1164px) 100vw, 1164px"
>
Flickity Docs 指定应使用的data-flickity-lazyload-srcsetdata-flickity-lazyload-src. 这意味着在wp_get_attachment_image.

我通过函数实现了这一点。php,就像这样(source):

function gs_change_attachment_image_markup($attributes){

    if (isset($attributes[\'src\'])) {
        $attributes[\'data-flickity-lazyload-src\'] = $attributes[\'src\'];
        $attributes[\'src\']      = \'\';
    }

    if (isset($attributes[\'srcset\'])) {
        $attributes[\'data-flickity-lazyload-srcset\'] = $attributes[\'srcset\'];
        $attributes[\'srcset\'] = \'\';
    }

    return $attributes;
}

add_filter( \'wp_get_attachment_image_attributes\', \'gs_change_attachment_image_markup\' );
这在前端非常有效,如下所示:

<img
  width="1164"
  height="450"
  srcset=""
  data-flickity-lazyload-src="image-1164x450.jpg"
  data-flickity-lazyload-srcset="
          image.jpg 1164w,
          image-300x116.jpg 300w,
          image-768x297.jpg 768w,
          image-1024x396.jpg 1024w,
          image-2328x900.jpg 2328w,
          image-1680x649.jpg 1680w,
          image.jpg 3492w
        "
  sizes="(max-width: 1164px) 100vw, 1164px"
>
不幸的是,这会使用wp_get_attachment_image.

是否可以分配gs_change_attachment_image_markup 功能到特定的自定义字段,以便不在站点范围内应用?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

您将无法真正分辨图像在wp_get_attachment_image_attributes 筛选,但可以将自定义属性传递给wp_get_attachment_image() 在模板中直接使用第4个参数。然后您可以使用wp_get_attachment_image_url()wp_get_attachment_image_srcset() 要获取这些属性的值,请执行以下操作:

$image = get_field(\'image\');
$size = \'gallery\';

echo wp_get_attachment_image( $image, $size, false, array(
    \'src\' => \'\',
    \'srcset\' => \'\',
    \'data-flickity-lazyload-src\' => wp_get_attachment_image_url( $image, $size ),
    \'data-flickity-lazyload-srcset\' => wp_get_attachment_image_srcset( $image, $size ),
) );

结束

相关推荐

Get images by category

我目前获取滑块图像的方法是使用以下工作正常的代码:$args = array( \'post_type\' => \'attachment\', \'sort_order\' => \'ASC\', \'sort_column\' => \'menu_order\', ); $attachments = get_posts($args); if ($attachments) { $