Home › Forums › WoodMart support forum › Create a new widget in child theme › Reply To: Create a new widget in child theme
September 12, 2022 at 3:54 pm
#402972

Elise Noromit
Member
Hello,
Please add this code to the functions.php of the child theme and add HTML blocks there:
if ( ! function_exists( 'wd_products_brands_render' ) ) {
function wd_products_brands_render( $widget_content, $widget ) {
if ( 'wd_products_brands' === $widget->get_name() ) {
ob_start();
$default_settings = [
'username' => 'flickr',
'number' => 20,
'hover' => 'default',
'target' => '_self',
'link' => '',
'ids' => '',
'style' => 'carousel',
'brand_style' => 'default',
'slides_per_view' => array( 'size' => 3 ),
'slides_per_view_tablet' => array( 'size' => '' ),
'slides_per_view_mobile' => array( 'size' => '' ),
'columns' => array( 'size' => 3 ),
'columns_tablet' => array( 'size' => '' ),
'columns_mobile' => array( 'size' => '' ),
'orderby' => '',
'hide_empty' => 0,
'order' => 'ASC',
'scroll_carousel_init' => 'no',
'filter_in_current_category' => 'no',
'custom_sizes' => apply_filters( 'woodmart_brands_shortcode_custom_sizes', false ),
];
$settings = wp_parse_args( $widget->get_settings_for_display(), array_merge( woodmart_get_owl_atts(), $default_settings ) );
$carousel_id = 'brands_' . rand( 1000, 9999 );
$attribute = woodmart_get_opt( 'brands_attribute' );
if ( empty( $attribute ) || ! taxonomy_exists( $attribute ) ) {
echo '<div class="wd-notice wd-info">' . esc_html__( 'You must select your brand attribute in Theme Settings -> Shop -> Brands', 'woodmart' ) . '</div>';
return ob_get_clean();
}
$settings['columns'] = isset( $settings['columns']['size'] ) ? $settings['columns']['size'] : 3;
$settings['slides_per_view'] = isset( $settings['slides_per_view']['size'] ) ? $settings['slides_per_view']['size'] : 3;
$owl_attributes = '';
$widget->add_render_attribute(
[
'wrapper' => [
'class' => [
'brands-items-wrapper',
'brands-widget',
'slider-' . $carousel_id,
'brands-hover-' . $settings['hover'],
'brands-style-' . $settings['brand_style'],
],
'id' => [
$carousel_id,
],
],
'items' => [
'class' => [
'brand-item',
],
],
]
);
if ( $settings['style'] ) {
$widget->add_render_attribute( 'wrapper', 'class', 'brands-' . $settings['style'] );
}
if ( 'carousel' === $settings['style'] ) {
woodmart_enqueue_inline_style( 'owl-carousel' );
$settings['scroll_per_page'] = 'yes';
$settings['carousel_id'] = $carousel_id;
if ( ! empty( $settings['slides_per_view_tablet']['size'] ) || ! empty( $settings['slides_per_view_mobile']['size'] ) ) {
$settings['custom_sizes'] = array(
'desktop' => $settings['slides_per_view'],
'tablet_landscape' => $settings['slides_per_view_tablet']['size'],
'tablet' => $settings['slides_per_view_mobile']['size'],
'mobile' => $settings['slides_per_view_mobile']['size'],
);
}
$owl_attributes = woodmart_get_owl_attributes( $settings );
$widget->add_render_attribute( 'items_wrapper', 'class', 'owl-carousel ' . woodmart_owl_items_per_slide( $settings['slides_per_view'], array(), false, false, $settings['custom_sizes'] ) );
$widget->add_render_attribute( 'wrapper', 'class', 'wd-carousel-container' );
$widget->add_render_attribute( 'wrapper', 'class', 'wd-carousel-spacing-0' );
if ( 'yes' === $settings['scroll_carousel_init'] ) {
woodmart_enqueue_js_library( 'waypoints' );
$widget->add_render_attribute( 'wrapper', 'class', 'scroll-init' );
}
if ( woodmart_get_opt( 'disable_owl_mobile_devices' ) ) {
$widget->add_render_attribute( 'wrapper', 'class', 'disable-owl-mobile' );
}
} else {
$widget->add_render_attribute( 'items_wrapper', 'class', 'row' );
$widget->add_render_attribute( 'items_wrapper', 'class', 'wd-spacing-0' );
$widget->add_render_attribute( 'items', 'class', woodmart_get_grid_el_class_new( 0, false, $settings['columns'], $settings['columns_tablet']['size'], $settings['columns_mobile']['size'] ) );
}
$args = array(
'taxonomy' => $attribute,
'hide_empty' => $settings['hide_empty'],
'order' => $settings['order'],
'number' => $settings['number'],
);
if ( $settings['orderby'] ) {
$args['orderby'] = $settings['orderby'];
}
if ( 'random' === $settings['orderby'] ) {
$args['orderby'] = 'id';
$brand_count = wp_count_terms(
$attribute,
array(
'hide_empty' => $settings['hide_empty'],
)
);
$offset = rand( 0, $brand_count - (int) $settings['number'] );
if ( $offset <= 0 ) {
$offset = '';
}
$args['offset'] = $offset;
}
if ( $settings['ids'] ) {
$args['include'] = $settings['ids'];
}
$brands = get_terms( $args );
$taxonomy = get_taxonomy( $attribute );
if ( 'random' === $settings['orderby'] ) {
shuffle( $brands );
}
if ( woodmart_is_shop_on_front() ) {
$link = home_url();
} elseif ( 'yes' === $settings['filter_in_current_category'] && is_product_category() ) {
$link = woodmart_get_current_url();
} else {
$link = get_post_type_archive_link( 'product' );
}
woodmart_enqueue_inline_style( 'brands' );
?>
<div <?php echo $widget->get_render_attribute_string( 'wrapper' ); ?> <?php echo $owl_attributes; ?>>
<div <?php echo $widget->get_render_attribute_string( 'items_wrapper' ); ?>>
<?php if ( ! is_wp_error( $brands ) && count( $brands ) > 0 ) : ?>
<?php foreach ( $brands as $key => $brand ) : ?>
<?php
$image = get_term_meta( $brand->term_id, 'image', true );
$filter_name = 'filter_' . sanitize_title( str_replace( 'pa_', '', $attribute ) );
if ( is_object( $taxonomy ) && $taxonomy->public ) {
$attr_link = get_term_link( $brand->term_id, $brand->taxonomy );
} else {
$attr_link = add_query_arg( $filter_name, $brand->slug, $link );
}
?>
<div <?php echo $widget->get_render_attribute_string( 'items' ); ?>>
<a title="<?php echo esc_html( $brand->name ); ?>" href="<?php echo esc_url( $attr_link ); ?>">
<?php if ( 'list' === $settings['style'] || ! $image || ( is_array( $image ) && empty( $image['id'] ) ) ) : ?>
<span class="brand-title-wrap">
<?php echo esc_html( $brand->name ); ?>
</span>
<?php elseif ( is_array( $image ) ) : ?>
<?php echo wp_get_attachment_image( $image['id'], 'full' ); ?>
<?php else : ?>
<?php echo '<img src="' . $image . '" alt="' . $brand->name . '" title="' . $brand->name . '">'; ?>
<?php endif; ?>
</a>
</div>
<?php endforeach; ?>
<?php endif; ?>
</div>
</div>
<?php
return ob_get_clean();
}
return $widget_content;
}
add_filter( 'elementor/widget/render_content', 'wd_products_brands_render', 10, 2 );
}
Best Regards