fusion_builder_default_visibility( 'string' ),
'class' => '',
'id' => '',
'layout' => 'static',
'number_of_images' => '3',
'show_title' => 'yes',
'show_buttons' => 'yes',
'show_cats' => 'yes',
'show_nav' => 'yes',
'show_price' => 'yes',
'show_rating' => 'yes',
'show_sale' => 'no',
'show_outofstock' => 'no',
'image_link' => 'yes',
'image_link_target' => '_self',
'image_link_custom' => '',
'show_cart_indicator' => 'yes',
'swap_nav_color' => 'var(--awb-color3)',
'swap_nav_color_hover' => 'var(--awb-color4)',
'swap_nav_height' => '5',
// Margins.
'margin_bottom' => '',
'margin_left' => '',
'margin_right' => '',
'margin_top' => '',
// Border Radius.
'border_radius_top_left' => '',
'border_radius_top_right' => '',
'border_radius_bottom_right' => '',
'border_radius_bottom_left' => '',
'crossfade_bg_color' => '',
// aspect ratio.
'aspect_ratio' => '',
'custom_aspect_ratio' => '',
'aspect_ratio_position' => '',
// Animation.
'animation_type' => '',
'animation_direction' => 'down',
'animation_speed' => '0.1',
'animation_delay' => '',
'animation_offset' => $fusion_settings->get( 'animation_offset' ),
'animation_color' => '',
];
}
/**
* Render for live editor.
*
* @static
* @access public
* @since 3.3
* @param array $defaults An array of defaults.
* @return void
*/
public function ajax_render( $defaults ) {
check_ajax_referer( 'fusion_load_nonce', 'fusion_load_nonce' );
$return_data = [];
// From Ajax Request.
if ( isset( $_POST['model'] ) && isset( $_POST['model']['params'] ) && ! apply_filters( 'fusion_builder_live_request', false ) ) { // phpcs:ignore WordPress.Security.NonceVerification
global $post;
$args = $_POST['model']['params']; // phpcs:ignore WordPress.Security
$post_id = isset( $_POST['post_id'] ) ? $_POST['post_id'] : get_the_ID(); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
$this->defaults = self::get_element_defaults();
$this->args = FusionBuilder::set_shortcode_defaults( $this->defaults, $args, 'fusion_post_card_image' );
// Check if dynamic source is a term and if so emulate.
if ( isset( $_POST['fusion_meta'] ) ) {
$meta = fusion_string_to_array( $_POST['fusion_meta'] ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput
if ( isset( $meta['_fusion']['dynamic_content_preview_type'] ) && 'term' === $meta['_fusion']['dynamic_content_preview_type'] && isset( $meta['_fusion']['preview_term'] ) && '' !== $meta['_fusion']['preview_term'] ) {
$GLOBALS['wp_query']->is_tax = true;
$GLOBALS['wp_query']->is_archive = true;
$GLOBALS['wp_query']->queried_object = get_term_by( 'id', $post_id, (string) $meta['_fusion']['preview_term'] );
}
}
if ( $post_id ) {
$post = get_post( $post_id );
}
fusion_set_live_data();
add_filter( 'fusion_builder_live_request', '__return_true' );
global $product;
if ( function_exists( 'wc_get_product' ) && is_null( $product ) ) {
$product = wc_get_product( $post_id );
}
$return_data['fusion_post_card_image'] = $this->get_post_card_image_content( $post_id );
}
echo wp_json_encode( $return_data );
wp_die();
}
/**
* Render the shortcode.
*
* @access public
* @since 3.3
* @param array $args Shortcode parameters.
* @param string $content Content between shortcode.
* @return string HTML output.
*/
public function render( $args, $content = '' ) {
$is_builder = ( function_exists( 'fusion_is_preview_frame' ) && fusion_is_preview_frame() ) || ( function_exists( 'fusion_is_builder_frame' ) && fusion_is_builder_frame() );
$html = '';
$this->defaults = self::get_element_defaults();
$this->args = FusionBuilder::set_shortcode_defaults( $this->defaults, $args, 'fusion_post_card_image' );
$image = $this->get_post_card_image_content( get_the_ID() );
$html .= '
' . $image . '
';
$this->on_render();
$this->element_counter++;
return apply_filters( 'fusion_element_post_card_image_content', $html, $args );
}
/**
* Set necesarry stuff after the first post card has rendered.
* For example, counter needs to be reset and also we need to generate styles only once.
*/
public function parent_post_card_rendered() {
$this->element_counter = 1;
}
/**
* Builds HTML for Post Card Image.
*
* @static
* @access public
* @since 3.3
* @param int $post_id Post ID.
* @return string
*/
public function get_post_card_image_content( $post_id = '' ) {
if ( ! $post_id ) {
$post_id = get_the_ID();
}
$this->args['in_cart'] = fusion_library()->woocommerce->is_product_in_cart( $post_id );
$featured_image_size = 'full';
fusion_library()->images->set_grid_image_meta(
[
'layout' => 'grid',
'columns' => FusionBuilder()->post_card_data['columns'],
'gutter_width' => FusionBuilder()->post_card_data['column_spacing'],
]
);
$image_args = [
'post_id' => $post_id,
'post_featured_image_size' => $featured_image_size,
'post_permalink' => get_permalink( $post_id ),
'display_placeholder_image' => 'rollover' !== $this->args['layout'] ? true : false,
'display_woo_sale' => 'yes' === $this->args['show_sale'],
'display_woo_outofstock' => 'yes' === $this->args['show_outofstock'],
'display_woo_price' => 'yes' === $this->args['show_price'],
'display_woo_buttons' => 'yes' === $this->args['show_buttons'],
'display_woo_rating' => 'yes' === $this->args['show_rating'],
'display_post_categories' => 'yes' === $this->args['show_cats'] ? 'enable' : 'disable',
'display_post_title' => 'yes' === $this->args['show_title'] ? 'enable' : 'disable',
'display_rollover' => 'rollover' === $this->args['layout'] ? 'yes' : 'no',
'image_link' => 'no' !== $this->args['image_link'] ? true : false,
];
if ( 'attachment' === get_post_type() ) {
$image_args['type'] = 'attachment';
}
if ( is_tax() ) {
$term_link = get_term_link( get_queried_object() );
if ( ! is_wp_error( $term_link ) ) {
$image_args['post_permalink'] = $term_link;
$image_args['post_id'] = get_queried_object()->term_id;
$image_args['type'] = 'taxonomy';
$image_args['display_post_categories'] = 'disable';
}
}
if ( 'custom' === $this->args['image_link'] ) {
$image_args['post_permalink'] = $this->args['image_link_custom'];
}
if ( 'no' !== $this->args['image_link'] && '_blank' === $this->args['image_link_target'] ) {
add_filter( 'fusion_builder_post_links_target', [ $this, 'set_rollover_image_link_target' ], 11, 2 );
}
// Add necessary class for image variation changes.
if ( 'product' === get_post_type( $post_id ) ) {
$image_args['attributes'] = [
'class' => 'woocommerce-product-gallery__image',
];
add_filter( 'wp_get_attachment_image_attributes', [ $this, 'add_product_image_attr' ], 10, 3 );
add_filter( 'awb_crossfade_image_classes', [ $this, 'add_to_crossfade_attr' ], 10, 2 );
}
$image_args['aspect_ratio'] = $this->get_aspect_ratio_value();
if ( 'static' === $this->args['layout'] || 'rollover' === $this->args['layout'] || is_tax() ) {
$image = avada_first_featured_image_markup( $image_args );
} else if ( 'swap' === $this->args['layout'] ) {
$image = $this->swap_render( $post_id );
} else {
$image = $this->crossfade_render( $post_id );
}
if ( 'no' === $this->args['show_cart_indicator'] && ( 'static' === $this->args['layout'] || 'crossfade' === $this->args['layout'] ) ) {
$image = preg_replace( '//', '', $image );
}
if ( 'no' !== $this->args['image_link'] && '_blank' === $this->args['image_link_target'] ) {
remove_filter( 'fusion_builder_post_links_target', [ $this, 'set_rollover_image_link_target' ], 11 );
}
if ( 'product' === get_post_type( $post_id ) ) {
remove_filter( 'wp_get_attachment_image_attributes', [ $this, 'add_product_image_attr' ], 10, 3 );
remove_filter( 'awb_crossfade_image_classes', [ $this, 'add_to_crossfade_attr' ], 10, 2 );
}
fusion_library()->images->set_grid_image_meta( [] );
return $image;
}
/**
* Add data attribute to product image.
*
* @param array $attr The attributes.
* @param Object $attachment The attachment.
* @param string $size The size.
* @since 3.8
* @return array
*/
public function add_product_image_attr( $attr, $attachment, $size ) {
$full_size = apply_filters( 'woocommerce_gallery_full_size', apply_filters( 'woocommerce_product_thumbnails_large_size', 'full' ) );
$full_src = wp_get_attachment_image_src( $attachment->ID, $full_size );
$attr['data-caption'] = _wp_specialchars( get_post_field( 'post_excerpt', $attachment->ID ), ENT_QUOTES, 'UTF-8', true );
$attr['data-src'] = esc_url( $full_src[0] );
$attr['data-large_image'] = esc_url( $full_src[0] );
$attr['data-large_image_width'] = esc_attr( $full_src[1] );
$attr['data-large_image_height'] = esc_attr( $full_src[2] );
return $attr;
}
/**
* Add data attribute to product image.
*
* @param array $classes The classes.
* @param Object $attachment The attachment.
* @since 3.8
* @return array
*/
public function add_to_crossfade_attr( $classes, $attachment ) {
$classes[] = 'woocommerce-product-gallery__image';
return $classes;
}
/**
* Change link target if necessary.
*
* @static
* @access public
* @since 3.3
* @param string $target The rollover target.
* @param int $post_id Post ID.
* @return string
*/
public function set_rollover_image_link_target( $target, $post_id ) {
// If post has link set in PO then use target from PO as well.
if ( fusion_get_page_option( 'link_icon_url', $post_id ) ) {
return $target;
}
return 'yes';
}
/**
* Get markup for crossfade image.
*
* @access public
* @since 3.3
* @param int $post_id Post ID.
* @return string
*/
public function crossfade_render( $post_id ) {
global $product;
$woo_badges = '';
$image = '';
$link_open = '';
$link_close = '';
if ( is_object( $product ) ) {
ob_start();
if ( 'yes' === $this->args['show_outofstock'] && method_exists( $product, 'is_in_stock' ) ) {
get_template_part( 'templates/wc-product-loop-outofstock-flash' );
}
if ( 'yes' === $this->args['show_sale'] && function_exists( 'woocommerce_show_product_sale_flash' ) ) {
woocommerce_show_product_sale_flash();
}
$woo_badges = ob_get_clean();
if ( '' !== $woo_badges ) {
$woo_badges = '
' . $woo_badges . '
';
}
}
ob_start();
get_template_part( 'templates/wc-thumbnail-classic' );
$image = ob_get_clean();
// Tax source doesn't use crossfade layout.
if ( 'no' !== $this->args['image_link'] ) {
$link = 'yes' === $this->args['image_link'] ? get_the_permalink() : $this->args['image_link_custom'];
$link_icon_url = apply_filters( 'fusion_builder_link_icon_url', '', $post_id );
$link = '' !== $link_icon_url ? $link_icon_url : $link;
$post_links_target = apply_filters( 'fusion_builder_post_links_target', '', $post_id );
$link_target = 'yes' === $post_links_target ? ' target="_blank"' : '';
$link_open = '
';
$link_close = '';
}
return $woo_badges . $link_open . $image . $link_close;
}
/**
* Get markup for swap image gallery.
*
* @access public
* @since 3.7.15
* @param int $post_id Post ID.
* @return string
*/
public function swap_render( $post_id ) {
global $product;
$woo_badges = '';
$swap_images = '';
$cart_spinner = '';
$link_open = '';
$link_close = '';
$image_ids = [];
$post_type = get_post_type();
if ( is_object( $product ) ) {
ob_start();
if ( 'yes' === $this->args['show_outofstock'] && method_exists( $product, 'is_in_stock' ) ) {
get_template_part( 'templates/wc-product-loop-outofstock-flash' );
}
if ( 'yes' === $this->args['show_sale'] && function_exists( 'woocommerce_show_product_sale_flash' ) ) {
woocommerce_show_product_sale_flash();
}
$woo_badges = ob_get_clean();
if ( '' !== $woo_badges ) {
$woo_badges = '
' . $woo_badges . '
';
}
}
$is_product = class_exists( 'WooCommerce' ) && 'product' === $post_type;
$size = 'full';
if ( true === $is_product ) {
$in_cart = fusion_library()->woocommerce->is_product_in_cart( $post_id );
$size = 'woocommerce_thumbnail';
$gallery = get_post_meta( $post_id, '_product_image_gallery', true );
if ( ! empty( $gallery ) ) {
$image_ids = explode( ',', $gallery );
if ( '0' !== $this->args['number_of_images'] ) {
$image_ids = array_slice( $image_ids, 0, $this->args['number_of_images'] );
}
}
if ( 'yes' === $this->args['show_cart_indicator'] ) {
$icon_class = ( $in_cart ) ? 'awb-icon-shopping-cart' : 'awb-icon-spinner';
$cart_spinner = '
';
}
} else {
$this->args['number_of_images'] = '0' === $this->args['number_of_images'] ? fusion_library()->get_option( 'posts_slideshow_number' ) : $this->args['number_of_images'];
for ( $i = 2; $i <= (int) $this->args['number_of_images']; $i++ ) {
$featured_image = fusion_get_featured_image_id( 'featured-image-' . $i, $post_type );
if ( $featured_image ) {
$image_ids[] = fusion_get_featured_image_id( 'featured-image-' . $i, $post_type );
}
}
}
$swap_images = '
';
$swap_nav = '
';
for ( $i = 0; $i < count( $image_ids ); $i++ ) {
$swap_images .= '
';
$swap_nav .= '
';
}
$swap_images .= '
';
$swap_nav .= '
';
if ( '0' === $this->args['swap_nav_height'] || 1 === count( $image_ids ) ) {
$swap_nav = '';
}
if ( 1 <= count( $image_ids ) ) {
$swap_nav .= '
';
$swap_nav .= '
';
$swap_nav .= '
';
$swap_nav .= '
';
}
$thumb_image = get_the_post_thumbnail( $post_id, $size );
if ( ! $thumb_image && function_exists( 'wc_placeholder_img_src' ) && wc_placeholder_img_src() ) {
$thumb_image = wc_placeholder_img( $size );
}
$thumb_image = str_replace( 'class="', 'class="awb-pc-image__thumb-image ', $thumb_image );
$images = '
';
$images .= $swap_images . $swap_nav . $thumb_image . $cart_spinner;
$images .= '
';
// Tax source doesn't use swap layout.
if ( 'no' !== $this->args['image_link'] ) {
$link = 'yes' === $this->args['image_link'] ? get_the_permalink() : $this->args['image_link_custom'];
$link_icon_url = apply_filters( 'fusion_builder_link_icon_url', '', $post_id );
$link = '' !== $link_icon_url ? $link_icon_url : $link;
$post_links_target = apply_filters( 'fusion_builder_post_links_target', '', $post_id );
$link_target = 'yes' === $post_links_target ? ' target="_blank"' : '';
$link_open = '
';
$link_close = '';
}
return $woo_badges . $link_open . $images . $link_close;
}
/**
* Builds the array of atributes.
*
* @access public
* @since 3.3
* @return array
*/
public function attr() {
$fusion_settings = awb_get_fusion_settings();
$attr = fusion_builder_visibility_atts(
$this->args['hide_on_mobile'],
[
'class' => 'fusion-' . $fusion_settings->get( 'woocommerce_product_box_design', false, 'classic' ) . '-product-image-wrapper fusion-woo-product-image fusion-post-card-image fusion-post-card-image-' . $this->element_counter,
'data-layout' => $this->args['layout'],
'style' => $this->get_style_variables(),
]
);
if ( $this->args['animation_type'] ) {
$attr = Fusion_Builder_Animation_Helper::add_animation_attributes( $this->args, $attr );
}
if ( $this->args['in_cart'] ) {
$attr['class'] .= ' fusion-item-in-cart';
}
if ( 'rollover' === $this->args['layout'] && 'no' === $this->args['image_link'] ) {
$attr['class'] .= ' fusion-disable-link';
}
if ( $this->args['class'] ) {
$attr['class'] .= ' ' . $this->args['class'];
}
if ( $this->args['id'] ) {
$attr['id'] = $this->args['id'];
}
if ( 'crossfade' === $this->args['layout'] || 'swap' === $this->args['layout'] ) {
$attr['class'] .= ' product-images';
}
if ( '' !== $this->args['aspect_ratio'] ) {
$attr['class'] .= ' has-aspect-ratio';
}
// Add necessary class for image variation changes.
if ( 'product' === get_post_type( get_the_ID() ) ) {
$attr['class'] .= ' images';
}
return $attr;
}
/**
* Get the style variables.
*
* @access protected
* @since 3.9
* @return string
*/
protected function get_style_variables() {
$custom_vars = [];
$css_vars_options = [
'margin_top' => [ 'callback' => [ 'Fusion_Sanitize', 'get_value_with_unit' ] ],
'margin_right' => [ 'callback' => [ 'Fusion_Sanitize', 'get_value_with_unit' ] ],
'margin_bottom' => [ 'callback' => [ 'Fusion_Sanitize', 'get_value_with_unit' ] ],
'margin_left' => [ 'callback' => [ 'Fusion_Sanitize', 'get_value_with_unit' ] ],
'crossfade_bg_color' => [ 'callback' => [ 'Fusion_Sanitize', 'color' ] ],
'swap_nav_color' => [ 'callback' => [ 'Fusion_Sanitize', 'color' ] ],
'swap_nav_color_hover' => [ 'callback' => [ 'Fusion_Sanitize', 'color' ] ],
'swap_nav_height' => [ 'callback' => [ 'Fusion_Sanitize', 'get_value_with_unit' ] ],
'border_radius_top_left' => [ 'callback' => [ 'Fusion_Sanitize', 'get_value_with_unit' ] ],
'border_radius_top_right' => [ 'callback' => [ 'Fusion_Sanitize', 'get_value_with_unit' ] ],
'border_radius_bottom_right' => [ 'callback' => [ 'Fusion_Sanitize', 'get_value_with_unit' ] ],
'border_radius_bottom_left' => [ 'callback' => [ 'Fusion_Sanitize', 'get_value_with_unit' ] ],
'aspect_ratio_position',
];
if ( ! $this->is_default( 'aspect_ratio' ) ) {
$custom_vars['aspect_ratio'] = $this->get_aspect_ratio_value();
}
return $this->get_css_vars_for_options( $css_vars_options ) . $this->get_custom_css_vars( $custom_vars );
}
/**
* Get the aspect ratio css value. Returns empty if not set.
*
* @since 3.9
* @return string
*/
private function get_aspect_ratio_value() {
$value = '';
if ( 'custom' === $this->args['aspect_ratio'] && '' !== $this->args['custom_aspect_ratio'] ) {
$value = 100 / $this->args['custom_aspect_ratio'];
} elseif ( ! empty( $this->args['aspect_ratio'] ) ) {
$aspect_ratio = explode( '-', $this->args['aspect_ratio'] );
$width = isset( $aspect_ratio[0] ) ? $aspect_ratio[0] : '';
$height = isset( $aspect_ratio[1] ) ? $aspect_ratio[1] : '';
$value = $width . ' / ' . $height;
}
return $value;
}
/**
* Sets the necessary scripts.
*
* @access public
* @since 3.11.15
* @return void
*/
public function on_first_render() {
// Skip if empty.
if ( null === $this->args || empty( $this->args ) ) {
return;
}
Fusion_Dynamic_JS::enqueue_script(
'awb-post-card-image',
FusionBuilder::$js_folder_url . '/general/awb-post-card-image.js',
FusionBuilder::$js_folder_path . '/general/awb-post-card-image.js',
[ 'jquery' ],
FUSION_BUILDER_VERSION,
true
);
}
/**
* Load base CSS.
*
* @access public
* @since 3.3
* @return void
*/
public function add_css_files() {
FusionBuilder()->add_element_css( FUSION_BUILDER_PLUGIN_DIR . 'assets/css/shortcodes/post-card-image.min.css' );
Fusion_Media_Query_Scripts::$media_query_assets[] = [
'awb-post-card-image-sm',
FUSION_BUILDER_PLUGIN_DIR . 'assets/css/media/post-card-image-sm.min.css',
[],
FUSION_BUILDER_VERSION,
Fusion_Media_Query_Scripts::get_media_query_from_key( 'fusion-max-small' ),
];
}
}
}
new FusionSC_PostCardImage();
}
/**
* Map shortcode to Avada Builder.
*
* @since 3.3
*/
function fusion_element_post_card_image() {
$fusion_settings = awb_get_fusion_settings();
fusion_builder_map(
fusion_builder_frontend_data(
'FusionSC_PostCardImage',
[
'name' => esc_attr__( 'Post Card Image', 'fusion-builder' ),
'shortcode' => 'fusion_post_card_image',
'icon' => 'fusiona-post-cards-image',
'templates' => [ 'post_cards' ],
'component' => true,
'help_url' => 'https://avada.com/documentation/post-card-image-element/',
'params' => [
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Layout', 'fusion-builder' ),
'description' => esc_attr__( 'Choose image layout.', 'fusion-builder' ),
'param_name' => 'layout',
'value' => [
'static' => esc_attr__( 'Static', 'fusion-builder' ),
'crossfade' => esc_attr__( 'Crossfade', 'fusion-builder' ),
'swap' => esc_attr__( 'Swap', 'fusion-builder' ),
'rollover' => esc_attr__( 'Rollover', 'fusion-builder' ),
],
'default' => 'static',
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_post_card_image',
'ajax' => true,
],
],
[
'type' => 'range',
'heading' => esc_attr__( 'Number of Swap Images', 'fusion-builder' ),
'description' => esc_attr__( 'Set the number of images to be used in image swap. Set to 0, to use all.', 'fusion-builder' ),
'param_name' => 'number_of_images',
'value' => '3',
'min' => '0',
'max' => '20',
'step' => '1',
'dependency' => [
[
'element' => 'layout',
'value' => 'swap',
'operator' => '==',
],
],
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_post_card_image',
'ajax' => true,
],
],
[
'type' => 'select',
'heading' => esc_attr__( 'Image Aspect Ratio', 'fusion-builder' ),
'description' => esc_attr__( 'Select an aspect ratio for the image.', 'fusion-builder' ),
'param_name' => 'aspect_ratio',
'value' => [
'' => esc_attr__( 'Automatic', 'fusion-builder' ),
'1-1' => esc_attr__( '1:1', 'fusion-builder' ),
'2-1' => esc_attr__( '2:1', 'fusion-builder' ),
'2-3' => esc_attr__( '2:3', 'fusion-builder' ),
'3-1' => esc_attr__( '3:1', 'fusion-builder' ),
'3-2' => esc_attr__( '3:2', 'fusion-builder' ),
'4-1' => esc_attr__( '4:1', 'fusion-builder' ),
'4-3' => esc_attr__( '4:3', 'fusion-builder' ),
'5-4' => esc_attr__( '5:4', 'fusion-builder' ),
'16-9' => esc_attr__( '16:9', 'fusion-builder' ),
'9-16' => esc_attr__( '9:16', 'fusion-builder' ),
'21-9' => esc_attr__( '21:9', 'fusion-builder' ),
'9-21' => esc_attr__( '9:21', 'fusion-builder' ),
'custom' => esc_attr__( 'Custom', 'fusion-builder' ),
],
],
[
'type' => 'range',
'heading' => esc_attr__( 'Custom Aspect Ratio', 'fusion-builder' ),
'description' => esc_attr__( 'Set a custom aspect ratio for the image.', 'fusion-builder' ),
'param_name' => 'custom_aspect_ratio',
'min' => 1,
'max' => 500,
'value' => 100,
'dependency' => [
[
'element' => 'aspect_ratio',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'image_focus_point',
'heading' => esc_attr__( 'Image Focus Point', 'fusion-builder' ),
'description' => esc_attr__( 'Set the image focus point by dragging the blue dot.', 'fusion-builder' ),
'param_name' => 'aspect_ratio_position',
'image' => 'element_content',
'image_id' => 'image_id',
'dependency' => [
[
'element' => 'aspect_ratio',
'value' => '',
'operator' => '!=',
],
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Show Cart Indicator', 'fusion-builder' ),
'description' => esc_attr__( 'Choose to show or hide the add to cart / added to cart indicator.', 'fusion-builder' ),
'param_name' => 'show_cart_indicator',
'value' => [
'yes' => esc_attr__( 'Yes', 'fusion-builder' ),
'no' => esc_attr__( 'No', 'fusion-builder' ),
],
'default' => 'yes',
'dependency' => [
[
'element' => 'layout',
'value' => 'rollover',
'operator' => '!=',
],
],
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_post_card_image',
'ajax' => true,
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Show Title', 'fusion-builder' ),
'description' => esc_attr__( 'Choose to show or hide the title.', 'fusion-builder' ),
'param_name' => 'show_title',
'value' => [
'yes' => esc_attr__( 'Yes', 'fusion-builder' ),
'no' => esc_attr__( 'No', 'fusion-builder' ),
],
'default' => 'yes',
'dependency' => [
[
'element' => 'layout',
'value' => 'rollover',
'operator' => '==',
],
],
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_post_card_image',
'ajax' => true,
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Show Categories', 'fusion-builder' ),
'description' => esc_attr__( 'Choose to show or hide the categories.', 'fusion-builder' ),
'param_name' => 'show_cats',
'value' => [
'yes' => esc_attr__( 'Yes', 'fusion-builder' ),
'no' => esc_attr__( 'No', 'fusion-builder' ),
],
'default' => 'yes',
'dependency' => [
[
'element' => 'layout',
'value' => 'rollover',
'operator' => '==',
],
],
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_post_card_image',
'ajax' => true,
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Show Price', 'fusion-builder' ),
'description' => esc_attr__( 'Choose to show or hide the price. Applies only to WooCommerce products.', 'fusion-builder' ),
'param_name' => 'show_price',
'value' => [
'yes' => esc_attr__( 'Yes', 'fusion-builder' ),
'no' => esc_attr__( 'No', 'fusion-builder' ),
],
'default' => 'yes',
'dependency' => [
[
'element' => 'layout',
'value' => 'rollover',
'operator' => '==',
],
],
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_post_card_image',
'ajax' => true,
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Show Rating', 'fusion-builder' ),
'description' => esc_attr__( 'Choose to show or hide the rating. Applies only to WooCommerce products.', 'fusion-builder' ),
'param_name' => 'show_rating',
'value' => [
'yes' => esc_attr__( 'Yes', 'fusion-builder' ),
'no' => esc_attr__( 'No', 'fusion-builder' ),
],
'default' => 'yes',
'dependency' => [
[
'element' => 'layout',
'value' => 'rollover',
'operator' => '==',
],
],
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_post_card_image',
'ajax' => true,
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Show Sale Badge', 'fusion-builder' ),
'description' => esc_attr__( 'Choose to show or hide the sale badge. Applies only to WooCommerce products.', 'fusion-builder' ),
'param_name' => 'show_sale',
'value' => [
'yes' => esc_attr__( 'Yes', 'fusion-builder' ),
'no' => esc_attr__( 'No', 'fusion-builder' ),
],
'default' => 'no',
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_post_card_image',
'ajax' => true,
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Show Out Of Stock Badge', 'fusion-builder' ),
'description' => esc_attr__( 'Choose to show or hide the out of stock badge. Applies only to WooCommerce products.', 'fusion-builder' ),
'param_name' => 'show_outofstock',
'value' => [
'yes' => esc_attr__( 'Yes', 'fusion-builder' ),
'no' => esc_attr__( 'No', 'fusion-builder' ),
],
'default' => 'no',
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_post_card_image',
'ajax' => true,
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Show Buttons', 'fusion-builder' ),
'description' => esc_attr__( 'Choose to show or hide Add to Cart / Details buttons on the rollover. Applies only to WooCommerce products.', 'fusion-builder' ),
'param_name' => 'show_buttons',
'value' => [
'yes' => esc_attr__( 'Yes', 'fusion-builder' ),
'no' => esc_attr__( 'No', 'fusion-builder' ),
],
'default' => 'yes',
'dependency' => [
[
'element' => 'layout',
'value' => 'rollover',
'operator' => '==',
],
],
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_post_card_image',
'ajax' => true,
],
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Link Image', 'fusion-builder' ),
'description' => esc_attr__( 'Choose to link image to default or custom link or disable link completely.', 'fusion-builder' ),
'param_name' => 'image_link',
'value' => [
'yes' => esc_attr__( 'Yes', 'fusion-builder' ),
'no' => esc_attr__( 'No', 'fusion-builder' ),
'custom' => esc_attr__( 'Custom', 'fusion-builder' ),
],
'default' => 'yes',
],
[
'type' => 'radio_button_set',
'heading' => esc_attr__( 'Link Target', 'fusion-builder' ),
'description' => esc_html__( 'Controls how the link will open.', 'fusion-builder' ),
'param_name' => 'image_link_target',
'value' => [
'_self' => esc_html__( 'Same Window/Tab', 'fusion-builder' ),
'_blank' => esc_html__( 'New Window/Tab', 'fusion-builder' ),
],
'default' => '_self',
'dependency' => [
[
'element' => 'image_link',
'value' => 'no',
'operator' => '!=',
],
],
],
[
'type' => 'textfield',
'heading' => esc_attr__( 'Custom Link', 'fusion-builder' ),
'description' => esc_attr__( 'Choos to link image to default or custom link or disable link completely.', 'fusion-builder' ),
'param_name' => 'image_link_custom',
'value' => '',
'dynamic_data' => true,
'dependency' => [
[
'element' => 'image_link',
'value' => 'custom',
'operator' => '==',
],
],
],
[
'type' => 'checkbox_button_set',
'heading' => esc_attr__( 'Element Visibility', 'fusion-builder' ),
'param_name' => 'hide_on_mobile',
'value' => fusion_builder_visibility_options( 'full' ),
'default' => fusion_builder_default_visibility( 'array' ),
'description' => esc_attr__( 'Choose to show or hide the element on small, medium or large screens. You can choose more than one at a time.', 'fusion-builder' ),
],
[
'type' => 'textfield',
'heading' => esc_attr__( 'CSS Class', 'fusion-builder' ),
'description' => esc_attr__( 'Add a class to the wrapping HTML element.', 'fusion-builder' ),
'param_name' => 'class',
'value' => '',
'group' => esc_attr__( 'General', 'fusion-builder' ),
],
[
'type' => 'textfield',
'heading' => esc_attr__( 'CSS ID', 'fusion-builder' ),
'description' => esc_attr__( 'Add an ID to the wrapping HTML element.', 'fusion-builder' ),
'param_name' => 'id',
'value' => '',
'group' => esc_attr__( 'General', 'fusion-builder' ),
],
[
'type' => 'dimension',
'remove_from_atts' => true,
'heading' => esc_attr__( 'Margin', 'fusion-builder' ),
'description' => esc_attr__( 'In pixels or percentage, ex: 10px or 10%.', 'fusion-builder' ),
'param_name' => 'margin',
'value' => [
'margin_top' => '',
'margin_right' => '',
'margin_bottom' => '',
'margin_left' => '',
],
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'callback' => [
'function' => 'fusion_style_block',
],
],
[
'type' => 'dimension',
'remove_from_atts' => true,
'heading' => esc_html__( 'Border Radius', 'fusion-builder' ),
'description' => esc_html__( 'Enter values including any valid CSS unit, ex: 10px.', 'fusion-builder' ),
'param_name' => 'border_radius',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'callback' => [
'function' => 'fusion_style_block',
'args' => [
'dimension' => true,
],
],
'value' => [
'border_radius_top_left' => '',
'border_radius_top_right' => '',
'border_radius_bottom_right' => '',
'border_radius_bottom_left' => '',
],
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Crossfade Background Color', 'fusion-builder' ),
'description' => esc_attr__( 'Set the background color of crossfade image container.', 'fusion-builder' ),
'param_name' => 'crossfade_bg_color',
'value' => '',
'default' => $fusion_settings->get( 'title_border_color' ),
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'dependency' => [
[
'element' => 'layout',
'value' => 'crossfade',
'operator' => '==',
],
],
],
[
'type' => 'range',
'heading' => esc_attr__( 'Swap Indicator Height', 'fusion-builder' ),
'description' => esc_attr__( 'Set the height of the swap indicator.', 'fusion-builder' ),
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'param_name' => 'swap_nav_height',
'min' => 0,
'max' => 30,
'step' => 0.5,
'value' => 5,
'dependency' => [
[
'element' => 'layout',
'value' => 'swap',
'operator' => '==',
],
],
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Swap Inidcator Color', 'fusion-builder' ),
'description' => esc_attr__( 'Set the color of the swap indicator.', 'fusion-builder' ),
'param_name' => 'swap_nav_color',
'value' => '',
'default' => 'var(--awb-color3)',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'dependency' => [
[
'element' => 'layout',
'value' => 'swap',
'operator' => '==',
],
],
],
[
'type' => 'colorpickeralpha',
'heading' => esc_attr__( 'Swap Inidcator Hover Color', 'fusion-builder' ),
'description' => esc_attr__( 'Set the hover color of the swap inidcator.', 'fusion-builder' ),
'param_name' => 'swap_nav_color_hover',
'value' => '',
'default' => 'var(--awb-color4)',
'group' => esc_attr__( 'Design', 'fusion-builder' ),
'dependency' => [
[
'element' => 'layout',
'value' => 'swap',
'operator' => '==',
],
],
],
'fusion_animation_placeholder' => [
'preview_selector' => '.fusion-post-card-image',
],
],
'callback' => [
'function' => 'fusion_ajax',
'action' => 'get_fusion_post_card_image',
'ajax' => true,
],
]
)
);
}
add_action( 'fusion_builder_wp_loaded', 'fusion_element_post_card_image' );