get_token_factory();
$inner_attributes = array();
foreach ( $markup_field_data->get_field_assets() as $field_asset ) {
$inner_attributes = array_merge(
$inner_attributes,
$field_asset->get_inner_variable_attributes( $markup_field_data->get_field_data(), $field_id )
);
}
foreach ( $inner_attributes as $name => $variable_info ) {
$var = $token_factory->variable( $variable_info['field_id'] )
->add_item_path( $variable_info['item_key'] );
$token_factory->format()
->attribute( $name, $var );
}
}
public function print_markup( string $field_id, Markup_Field_Data $markup_field_data ): void {
$token_factory = $markup_field_data->get_token_factory();
$attributes_map = array(
'src' => 'value',
'width' => 'width',
'height' => 'height',
'alt' => 'alt',
'decoding' => 'decoding',
'loading' => 'loading',
'srcset' => 'srcset',
'sizes' => 'sizes',
);
printf(
'
get_field_class(
'image',
$markup_field_data
)
),
);
foreach ( $attributes_map as $attribute_name => $item_key ) {
$var = $token_factory->variable( $field_id )
->add_item_path( $item_key );
$token_factory->format()
->attribute( $attribute_name, $var );
}
$this->print_inner_attributes( $field_id, $markup_field_data );
echo '>';
}
/**
* @return array
*/
public function get_template_variables( Variable_Field_Data $variable_field_data ): array {
$args = array(
'width' => 0,
'height' => 0,
'value' => '',
'alt' => '',
'caption' => '',
'description' => '',
'srcset' => '',
'sizes' => '',
'decoding' => 'async',
'loading' => 'lazy',
'full_size' => '',
'svg_content' => '',
// for cases when image is used inside a gallery,
// it allows to get image meta fields (using another View shortcode).
'id' => 0,
);
$image_size = '' !== $variable_field_data->get_field_data()->image_size ?
$variable_field_data->get_field_data()->image_size :
'full';
$value = is_numeric( $variable_field_data->get_value() ) ?
(int) $variable_field_data->get_value() :
0;
if ( 0 === $value ) {
return $args;
}
$image_data = wp_get_attachment_image_src( $value, $image_size );
$image_data = false === $image_data ?
array() :
$image_data;
$image_src = $image_data[0] ?? '';
$width = $image_data[1] ?? 0;
$height = $image_data[2] ?? 0;
if ( '' === $image_src ) {
return $args;
}
$alt = get_post_meta( $value, '_wp_attachment_image_alt', true );
$args['id'] = $value;
$args['width'] = $width;
$args['height'] = $height;
$args['value'] = $image_src;
$args['alt'] = is_string( $alt ) || is_numeric( $alt ) ?
$alt :
'';
$args['full_size'] = (string) wp_get_attachment_image_url( $value, 'full' );
$args['caption'] = get_post_field( 'post_excerpt', $value );
$args['description'] = get_post_field( 'post_content', $value );
if ( false !== strpos( $image_src, '.svg' ) ) {
$attached_file = (string) get_attached_file( $value );
$args['svg_content'] = '' !== $attached_file ?
// @phpcs:ignore
(string) file_get_contents( $attached_file ) :
'';
}
$image_meta = wp_get_attachment_metadata( $value );
if ( false === is_array( $image_meta ) ) {
return $args;
}
$sizes_array = array( absint( $width ), absint( $height ) );
$src_et = (string) wp_calculate_image_srcset( $sizes_array, $image_src, $image_meta, $value );
$sizes = (string) wp_calculate_image_sizes( $sizes_array, $image_src, $image_meta, $value );
if ( '' === $src_et ||
'' === $sizes ) {
return $args;
}
$args['srcset'] = $src_et;
$args['sizes'] = $sizes;
return $args;
}
/**
* @return array
*/
public function get_validation_template_variables( Variable_Field_Data $variable_field_data ): array {
$args = array(
'width' => 0,
'height' => 0,
'value' => '',
'alt' => '',
'caption' => '',
'description' => '',
'srcset' => '',
'sizes' => '',
'decoding' => 'async',
'loading' => 'lazy',
'full_size' => '',
'id' => 0,
'svg_content' => '',
);
return array_merge(
$args,
array(
'width' => 1,
'height' => 1,
'value' => 'https://wordpress.org/',
'alt' => 'wordpress.org',
'caption' => 'wp.org screenshot',
'description' => 'wp.org screenshot',
'srcset' => 'https://wordpress.org/ 1w',
'sizes' => '(max-width: 1px) 1vw',
'full_size' => 'https://wordpress.org/',
'svg_content' => '',
)
);
}
public function is_with_field_wrapper(
Layout_Settings $layout_settings,
Field_Settings $field_settings,
Field_Meta $field_meta
): bool {
return $layout_settings->is_with_unnecessary_wrappers;
}
/**
* @return string[]
*/
public function get_conditional_fields( Field_Meta $field_meta ): array {
$conditional_fields = array( Field_Settings::FIELD_IMAGE_SIZE );
// repeatable fields aren't supported (they've markup like a repeater field).
if ( null === $field_meta->get_self_repeatable_meta() ) {
$conditional_fields = array_merge(
$conditional_fields,
array(
Field_Settings::FIELD_LIGHTBOX_TYPE,
Field_Settings::FIELD_GALLERY_WITH_LIGHT_BOX,
)
);
}
return array_merge( parent::get_conditional_fields( $field_meta ), $conditional_fields );
}
public function get_front_assets( Field_Settings $field_settings ): array {
$front_assets = array();
switch ( $field_settings->lightbox_type ) {
case 'simple':
$front_assets[] = Lightbox_Pattern::NAME;
break;
case 'lightgallery_v2':
$front_assets[] = Light_Gallery_Pattern::NAME;
break;
}
return array_merge( parent::get_front_assets( $field_settings ), $front_assets );
}
}